Lady_Lilith Geschrieben 26. August 2008 Geschrieben 26. August 2008 Hallo! Habe folgendes Problem: Ich soll aus mehreren Listen eine Liste machen. In jeder Liste ist jedoch eine Kopfzeile, mit den Überschriften. Die Überschrift soll jedoch nur in der ersten Liste erscheinen, die anderen werden ja angehangen, sodass es später eine große Liste wird. class Program { static void Main(string[] args) { // Verzeichnis wird nach Dateien mit der Endung .tax durchsucht: string[] dirs = Directory.GetFiles(@"c:\Users\js\JS\", "*.tax"); // Der Pfadname der neuen Datei wird in einer Variablen gespeichert: string sPathName = @"C:\Users\js\JS\taxdata-2008-test.csv"; // Die Datei, in die reingeschrieben werden soll, wird gelöscht: File.Delete(sPathName); // Die Datei, in die reingeschrieben werden soll, wird neu erstellt: // In die Datei wird anhängend reingeschrieben: StreamWriter sw = new StreamWriter(sPathName, true); // Data wird als string deklariert: string Data; long l; bool bErsteZeile = true; // Für jeden String in dieser Stringfolge wird Folgendes gemacht: foreach (string s in dirs) { DateiLesen(); // Data wird in die neue Datei geschrieben: sw.Write(Data); sw.Flush(); } sw.Flush(); sw.Close(); } void DateiLesen(string s, bool bErsteZeile) { // Data wird als string deklariert: string Data; long l; if (bErsteZeile = true) { // die nächste der foreach-Dateien wird zum Lesen geöffnet: StreamReader sr = File.OpenText(s); // Data ist der Inhalt dieser Datei: Data = sr.ReadToEnd(); // l ist die Länge von Data: l = Data.Length; // Die Datei, aus der gelesen wird, wird geschlossen: sr.Close(); bErsteZeile = false; } else { // die nächste der foreach-Dateien wird zum Lesen geöffnet: StreamReader sr = File.OpenText(s); // Data ist der Inhalt dieser Datei: Data = sr.ReadToEnd.Substring(0, // Die erste Zeile muss weggeschmissen werden: // l ist die Länge von Data: l = Data.Length; // Die Datei, aus der gelesen wird, wird geschlossen: sr.Close(); } } } Bis hierhin bin ich gekommen. Nur sagt mir das jetzt erstens, dass: "Keine Überladung für die DateiLesen-Methode nimmt 0 Argumente an." Und ich weiß nicht, was ich damit anfangen soll, und 2. weiß ich nicht, wie ich bei den anderen Dateien die Datei auslesen kann und später dann die Kopfzeile (sowas mit Substring von 0 bis zum ersten Zeilenumbruch) wegnehmen kann. Könnte mir da wer helfen? Liebe Grüße Zitieren
Guybrush Threepwood Geschrieben 26. August 2008 Geschrieben 26. August 2008 Nur sagt mir das jetzt erstens, dass: "Keine Überladung für die DateiLesen-Methode nimmt 0 Argumente an." Und ich weiß nicht, was ich damit anfangen soll, Naja eigentlich ganz einfach, die Methode DateiLesen erwartet 2 Parameter, du rufst sie aber ohne Parameter auf und 2. weiß ich nicht, wie ich bei den anderen Dateien die Datei auslesen kann und später dann die Kopfzeile (sowas mit Substring von 0 bis zum ersten Zeilenumbruch) wegnehmen kann. Ja genau, in der DateiLesen Methode lädst du mit sr.ReadToEnd() den kompletten Dateiinhalt in einen String. Stattdessen könntest du die Datei zuerst so lange Zeilenweise einlesen bis der Kopf abgeschlossen ist (und diesen ggf. einfach verwerfen) und dann erst den kompletten rest mit ReadToEnd() lesen... Zitieren
Lady_Lilith Geschrieben 26. August 2008 Autor Geschrieben 26. August 2008 Naja, wenn ich die Parameter, die ich ja im Anfang der Unterfunktion schon habe, in die klammern einfüge, sagt mir das, dass ich string und so nicht nehmen darf, mach ichs ohne, meckert er auch. Die Kopfzeile ist nur eine einzige Zeile, also mach ich das quasi so, dass ich erst readline nehme, das dann lösche und dann readtoend? Zitieren
Guybrush Threepwood Geschrieben 26. August 2008 Geschrieben 26. August 2008 Die Kopfzeile ist nur eine einzige Zeile, also mach ich das quasi so, dass ich erst readline nehme, das dann lösche und dann readtoend? Genau, nur beim ersten mal darfst du es ja nicht löschen weil du den Kopf ja einmal brauchst. Zitieren
Lady_Lilith Geschrieben 26. August 2008 Autor Geschrieben 26. August 2008 Wie lösch ich das denn dann? Zitieren
Guybrush Threepwood Geschrieben 26. August 2008 Geschrieben 26. August 2008 Indem du es nicht in deine Ergebnisliste kopierst wenn du es nicht brauchst? Zitieren
Lady_Lilith Geschrieben 26. August 2008 Autor Geschrieben 26. August 2008 Wollte es lieber mit einem Substring machen . . . Substring(0, Zeilenumbruch) Nur weiß ich nicht, wie ich den Zeilenumbruch dann darstelle. Und bei dem anderen Problem mit dem Parametern sagt er mir jetzt: "Für das nicht statische Feld, die Methode oder die Eigenschaft "ConsoleApplication10.Program.DateiLesen(string, bool)" ist ein Objektverweis erforderlich." Bei mir steht da jetzt: class Program { static void Main(string[] args) { // Verzeichnis wird nach Dateien mit der Endung .tax durchsucht: string[] dirs = Directory.GetFiles(@"c:\Users\js\JS\", "*.tax"); // Der Pfadname der neuen Datei wird in einer Variablen gespeichert: string sPathName = @"C:\Users\js\JS\taxdata-2008-test.csv"; // Die Datei, in die reingeschrieben werden soll, wird gelöscht: File.Delete(sPathName); // Die Datei, in die reingeschrieben werden soll, wird neu erstellt: // In die Datei wird anhängend reingeschrieben: StreamWriter sw = new StreamWriter(sPathName, true); // Data wird als string deklariert: string Data; long l; bool bErsteZeile = true; // Für jeden String in dieser Stringfolge wird Folgendes gemacht: foreach (string s in dirs) { [COLOR="Lime"]DateiLesen(s, bErsteZeile);[/COLOR] // Data wird in die neue Datei geschrieben: sw.Write(Data); sw.Flush(); } sw.Flush(); sw.Close(); } [COLOR="lime"]void DateiLesen(string s, bool bErsteZeile)[/COLOR] { // die nächste der foreach-Dateien wird zum Lesen geöffnet: StreamReader sr = File.OpenText(s); // DataErsteZeile ist die Erste Zeile in der zu lesenden Datei: string DataErsteZeile = sr.ReadLine(); // DataRest ist der Inhalt dieser Datei ohne die erste Zeile string DataRest = sr.ReadToEnd(); string Data; // Wenn wir eine erste Zeile haben, dann: if (bErsteZeile == true) { // Data ist DataRest: Data = DataRest; // Die Datei, aus der gelesen wird, wird geschlossen: sr.Close(); // Wir setzen bErsteZeile wieder auf false: bErsteZeile = false; } else { // Für die anderen Zeilen ist Data dann DataRest ohne die erste Zeile [COLOR="Lime"]Data = DataRest.Substring(0, *Zeilenumbruch*);[/COLOR] // Die Datei, aus der gelesen wird, wird geschlossen: sr.Close(); } File.Delete(s); } } Zitieren
Guybrush Threepwood Geschrieben 26. August 2008 Geschrieben 26. August 2008 Die Methode DateiLesen muss natürlich statisch sein weil du sonst eine Instanz deiner Klasse bräuchtest um darauf zuzugreifen: static void DateiLesen(string s, bool bErsteZeile) [/PHP] Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.