Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben
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...

Geschrieben

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?

Geschrieben

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);

        }

    }

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...