Dateiinhalt in CString lesen



  • ich will praktisch immer die aktuelle zeile auslesen und dann die einzelnen werte meinen variablen zuweisen und dann zur nächsten zeile wechseln, wie kann ich eine schleife so bauen, dass das genauso funktioniert?

    mfg, TFTS



  • ich hab ja eine schleife drin, nur ist die wahrscheinlich falsch so wie ich sie hab, deswegen wird es mir wohl die gesamte datei auslesen



  • es könnte natürlich auch noch daran liegen, dass ich beim schreiben der dateien als zeilenumbruch \r verwende > in excel beginnt er danach dann eine neue zeile, aber vielleicht erkennt C beim einlesen der datei das \r nicht als zeilenumbruch?

    wenn dem so ist, wie kann ich einen zeilenumbruch erzeugen beim schreiben der datei?

    mfg, TFTS



  • Das verstehe ich jetzt wiederum nicht. Wenn du ReadString nur einmal einsetzt, wird die erste und damit aktuelle zeile ausgelesen :

    CStdioFile file;
    ....
    CString str;
    file.ReadString(str);
    .
    .
    

    Wenn du jedoch alle Zeilen auslesen möchtest, dann nimmst du eine Schleife :

    CStdioFile file;
    ...
    .
    while( file.ReadString(str) )
    {
       // Hier irgendwas machen
    }
    

    Was verstehst du nicht ... ?

    Gruß
    :: NoName ::



  • Den Zeilenumbruch solltest du vielleicht mit \r\n erzeuegen...

    Gruß
    :: NoName ::



  • :: NoName :: schrieb:

    Den Zeilenumbruch solltest du vielleicht mit \r\n erzeuegen...

    Für was? er will doch nur lesen, wenn ich das richtig verstanden habe?



  • Ich denke das erklärt alles

    TFTomSun schrieb:

    wenn dem so ist, wie kann ich einen zeilenumbruch erzeugen beim schreiben der datei?

    Gruß
    :: NoName ::



  • genau das hab ich gemacht und er liest mir jedes mal die komplette datei ein ... hier der code: (in CString_hlp steht dann immer die komplette datei auch bei \r\n als Zeilenumbruch)

    if(File.Open("Lager.csv", CFile::modeRead)) //Öffnen von Lager.csv im Read Modus
    	{ 
    		while(File.ReadString(CString_hlp)) 
    		{ 
    			Produktname[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(Produktname[Produktnr]+",","");
    
    			Kurzname[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(Kurzname[Produktnr]+",","");
    
    			Bestellnr[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(Bestellnr[Produktnr]+",","");
    
    			Hersteller[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(Hersteller[Produktnr]+",","");
    
    			Lieferant1[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(Lieferant1[Produktnr]+",","");
    
    			Lieferant2[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(Lieferant2[Produktnr]+",","");
    
    			Listenpreis[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(Listenpreis[Produktnr]+",","");
    
    			Rabatt[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(Rabatt[Produktnr]+",","");
    
    			Zuschlag[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(Zuschlag[Produktnr]+",","");
    
    			Einkaufspreis[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(Einkaufspreis[Produktnr]+",","");
    
    			Verkaufspreis[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(Verkaufspreis[Produktnr]+",","");
    
    			Anzahl[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(Anzahl[Produktnr]+",","");
    
    			Anzahl_krit[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(Anzahl_krit[Produktnr]+",","");
    
    			Teile[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(Teile[Produktnr]+",","");
    
    			Warennr[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(Warennr[Produktnr]+",","");
    
    			Land[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(Land[Produktnr]+",","");
    
    			Praeferenz[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(Praeferenz[Produktnr]+",","");
    
    			ProduktID[Produktnr] = CString_hlp.Left(CString_hlp.Find(",",0));
    			CString_hlp.Replace(ProduktID[Produktnr]+",","");
    
    			if(Produktnr!=0)
    				m_produktname_control.AddString(Produktname[Produktnr]);
    
    			Produktnr++;
    		} 
    	} 
    	File.Close();
    


  • :: NoName :: schrieb:

    Ich denke das erklärt alles

    TFTomSun schrieb:

    wenn dem so ist, wie kann ich einen zeilenumbruch erzeugen beim schreiben der datei?

    Gruß
    :: NoName ::

    OK, hast recht. Habe ich nicht gelesen.
    Damit wäre auch das Einlesen-Problem gelöst.



  • Hmm, also meinst du jetzt das wenn du am Ende die Variable ausliest, dass dort dann der ganze Inhalt aus der Datei steht ?

    eigentlich müsste dann nur die letzte Zeile aus der Datei in der Variable stehen ..

    Gruß
    :: NoName ::



  • Nein - das verhalten ist eigentlich einleuchtend:
    ReadString liest bis zum Zeilenende: da ist \n
    Wenn der Kollege mir \r das Zeilenende formatiert, ist das natürlich kein Grund für ReadString, an dieser Stelle das Einlesen zu beenden sondern macht weiter bis irgendwann mal \0 kommt



  • vielen dank, hat sich erledigt, ich hatte die stringlänge noch nicht neu definiert für den zeilenumbruch, er hat also trotz dass ich \r\n eingeben hatte immernoch nur \r geschrieben
    danke nochmal

    mfg, TFTS


Anmelden zum Antworten