Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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?

Wie lösch ich das denn dann?

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

        }

    }

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.