Blockweises Lesen einer Datei



  • Ich muss aus einem Textfile der Form

    Hans,Peter,123,ja,nein,Michael,Bauer,,nein,nein usw.

    blockweise die einzelnen Elemente auslesen.

    Geht das irgendwie einfacher als mit dem Read-Befehl ?

    Danke für Antworten 🙂

    mfG
    Gawan



  • Servus,

    wenn du als Seperator "," hast dann kannst du das so machen:

    StreamReader fFile = new StreamReader("C:\\Katzenklo.txt", System.Text.Encoding.GetEncoding("ISO-8859-1"));
    
    string[] strText = fFile.ReadToEnd().Split(",".ToCharArray());
    fFile.Close();
    

    Fehlerbehandlung bekommst du bestimmt selber hin 😉

    *winke*
    Hellsgore



  • Danke für die rasche Hilfe, aber wenn ich den Code so anwende steht in der Console nur System.String[] 😞

    static void Main(string[] args)
    		{
    			string a;
    
    			StreamReader fFile = new StreamReader("C:\\test.txt", System.Text.Encoding.GetEncoding("ISO-8859-1")); 
    
    			string[] strText = fFile.ReadToEnd().Split(",".ToCharArray()); 
    
    			fFile.Close();
    
    			Console.WriteLine(strText);
    
    			a=Console.ReadLine();
    
    		}
    


  • Servus,

    ajo, das ist ja auch ein StringArray. Ansprechen mit strText[1], strText[2] etc.

    *winke*
    Hellsgore



  • maaa...ich bin so blöd

    natürlich gehts, nur mit Console.WriteLine(strText) wird sich ned viel abspielen wenn des strText ein Array ist *ggg*

    DANKE, haut jetzt hin



  • gleichzeitig bemerkt :):)



  • hehe *g*



  • hallo - ich nochmal 😉

    gibts da auch eine Möglichkeit die Daten in Blöcken auszulesen ?

    optimal wäre eine lösung auf diese Art:

    for (int i=0;i<10;i++) {
       lies Block von 5 elementen die durch ',' getrennt sind in ein array
    }
    

    Ich bin da leider zu wenig Programmierer um deinen Code dmeentsprechend umzuschreiben 😞 😞



  • abgekürzt wärs natürlich auch praktisch alle zeichen bis zum ',' in ein arrayfeld zu kopieren, die nächsten zeichen ins nächste arrayfeld bis zu einem Abbruchkriterium ( in meinem Fall gibts nur 6 Datenfelder) die sich dann zigtausendmal wiederholen



  • Servus,

    ei gucke mal, du hast doch einen Array. In diesem Stehen alle Elemente drin die durch ein "," getrennt sind. Mann könnte doch z.B. soetwas machen:

    using System.Collections;
    
    string[] strArrText..... //Dein Array
    string strLineSep = string.Empty;
    ArrayList arrLines = new ArrayList();
    int iCount = 0;
    for (int i = 0; i < strArrText.length; i++)
    {
    	strLineSep += strArrText[i] + ",";
    	iCount++;
    
    	if (iCount == 5)
    	{
    		iCount = 0;
    		arrLines.Add(strLineSep);
    		strLineSep = string.Empty;
    	}					
    }
    
    //Hier noch Rest
    if (iCount > 0)
    {
    	iCount = 0;
    	arrLines.Add(strLineSep);
    	strLineSep = string.Empty;
    }
    
    //Dann dein Consoloenwrite
    for (int i = 0; i < arrLines.Count; i++)
    Console.RubbeldieKatz(arrLines[i].ToString());
    

    Ist nur ein Beispiel. Habe Heute keine große Lust zu überlegen.

    *winke*
    Hellsgore



  • danke - werds mir anschaun

    das Problem bei dem vorherigen Array war, dass ich mit 500.000 Einträgen arbeite und das Array 210MB speicher benötigt wenn es voll ist :):):)



  • Servus,

    das ist Scheisse, dann lese die Datei sequentiell, Satz für Satz und gebe diese dann direkt am Bildschrim aus.

    Bsp.:

    StreamReader fFile = new StreamReader("C:\\Katzenklo.txt", System.Text.Encoding.GetEncoding("ISO-8859-1"));
    string strInput = string.Empty;
    
    while ((strInput = fFile.ReadLine()) != null)
    {
       string[] strArrLines = strInput.Split(",".ToCharArray());
       while (strArrLines.Length > 0)
       {
       // dann liest du 5 Elemente, schreibst die auf den Bildschirm und löschst sie wieder aus dem Array. Dann liest du weitere 5 Element löschst diese wieder bis das Array leer ist
       }
    }
    
    fFile.Close();
    

    Dann flummst du nicht alles in den Speicher sondern gibst direkt aus. Das ist jetzt nur ein Ansatz den Rest bekommst du sicherlich auch alleine hin.

    *winke*
    Hellsgore


Anmelden zum Antworten