ProblemstellungStream C# Formatierung Ausgabe
Um Gen-Annotation-Software zu laufen, ich brauche zwei Arten von Dateien zu erstellen, V-Card-Dateien und Berichterstattung Tabellen, und es eine Eins-zu-Eins-Spiel von zu sein hat vcard zur Abdeckungstabelle. Da ich 2k-Samples verwende, ist es schwer zu erkennen, welche Datei nicht eins zu eins übereinstimmt. Ich weiß, dass beide Dateien eindeutige Kennung Zahlen haben daher, wenn beide Ordner Dateien haben, die gleiche eindeutige Nummern haben, ich behandle, dass als „gleich“
I-Datei ein Programm aus, das zwei Ordner und Berichte eindeutige Einträge vergleicht in jedem Ordner. Um dies zu tun, habe ich zwei Listen erstellt, die eindeutige Dateinamen für jedes Verzeichnis enthalten.
ich die Berichtsdatei (Tab TXT-Datei getrennt) formatiert werden soll, so dass es so etwas wie unten aussieht:
Unique in fdr1 Unique in fdr2
file x file a
file y file b
file z file c
ich dies schwer zu tun, weil ich zweimal durchlaufen müssen (da ich zwei Listen), aber es gibt keine Möglichkeit, in StreamWriter zurück zur vorherigen Zeile zu gehen, soweit ich weiß. Wenn ich die erste Liste durchlaufen habe und die erste Spalte gefüllt habe, wie kann ich dann die zweite Spalte mit der zweiten füllen?
Kann mir jemand dabei helfen?
Dank
Wenn Entwurf des Codes ändern muss (dh eine Liste statt zwei), mich bitte
angefordert wissen lassen, wie sie von einigen Benutzern, das ist, wie ich tun würde (nicht Arbeitsversion)
// Write report
using (StreamWriter sw = new StreamWriter(dest_txt.Text + @"\" + "Report.txt"))
{
// Write headers
sw.WriteLine("Unique Entries in Folder1" + "\t" + "Unique Entries in Folder2");
// Write unique entries in fdr1
foreach(string file in fdr1FileList)
{
sw.WriteLine(file + "\t");
}
// Write unique entries in fdr2
foreach (string file in fdr2FileList)
{
sw.WriteLine(file + "\t");
}
sw.Dispose();
}
Wie für die Suche nach einzigartigen Einträge für meinen Ansatz gebeten, hier ist mein Code-Schnipsel
Dictionary<int, bool> fdr1Dict = new Dictionary<int, bool>();
Dictionary<int, bool> fdr2Dict = new Dictionary<int, bool>();
List<string> fdr1FileList = new List<string>();
List<string> fdr2FileList = new List<string>();
string fdr1Path = folder1_txt.Text;
string fdr2Path = folder2_txt.Text;
// File names in the specified directory; path not included
string[] fdr1FileNames = Directory.GetFiles(fdr1Path).Select(Path.GetFileName).ToArray();
string[] fdr2FileNames = Directory.GetFiles(fdr2Path).Select(Path.GetFileName).ToArray();
// Iterate through the first directory, and add GL number to dictionary
for(int i = 0; i < fdr1FileNames.Length; i++)
{
// Grabs only the number from the file name
string number = Regex.Match(fdr1FileNames[i], @"\d+").ToString();
int glNumber;
// Make sure it is a number
if(Int32.TryParse(number, out glNumber))
{
fdr1Dict[glNumber] = true;
}
// If number not present, raise exception
else
{
throw new Exception(String.Format("GL Number not found in: {0}", fdr1FileNames[i]));
}
}
// Iterate through the second directory, and add GL number to dictionary
for (int i = 0; i < fdr2FileNames.Length; i++)
{
// Grabs only the number from the file name
string number = Regex.Match(fdr2FileNames[i], @"\d+").ToString();
int glNumber;
// Make sure it is a number
if (Int32.TryParse(number, out glNumber))
{
fdr2Dict[glNumber] = true;
}
// If number not present, raise exception
else
{
throw new Exception(String.Format("GL Number not found in: {0}", fdr2FileNames[i]));
}
}
// Iterate through the first directory, and find files that are unique to it
for (int i = 0; i < fdr1FileNames.Length; i++)
{
int glNumber = Int32.Parse(Regex.Match(fdr1FileNames[i], @"\d+").Value);
// If same file is not present in the second folder add to the list
if(!fdr2Dict[glNumber])
{
fdr1FileList.Add(fdr1FileNames[i]);
}
}
// Iterate through the second directory, and find files that are unique to it
for (int i = 0; i < fdr2FileNames.Length; i++)
{
int glNumber = Int32.Parse(Regex.Match(fdr2FileNames[i], @"\d+").Value);
// If same file is not present in the first folder add to the list
if (!fdr1Dict[glNumber])
{
fdr2FileList.Add(fdr2FileNames[i]);
}
Können Sie Ihren Code von dem, was Sie bisher versucht haben, zu posten, so können wir helfen Sie identifizieren das Problem? – Wellspring
Was meinst du mit UNIQUE Eintrag? Jede Datei in einem Verzeichnis hat einen anderen Namen. Meinst du zB 2 Dateien wie 'name.test' und' name.test2'? – Sid
Um eine Problemaussage zu spezifizieren, muss ich zwei Arten von Dateien, vcard-Dateien und Coverage-Tabellen vorbereiten, um gen-Annotationssoftware ausführen zu können, und es muss eine Eins-zu-eins-Übereinstimmung von vcard mit der Coverage-Tabelle bestehen. Da ich 2k-Samples verwende, ist es schwer zu erkennen, welche Datei nicht eins zu eins übereinstimmt. Ich weiß, dass beide Dateien eindeutige Bezeichner Nummern haben, daher, wenn beide Ordner Dateien haben, die gleiche eindeutige Nummern haben, behandle ich das als "gleiche" Datei – djskj189