Bis zum Zeilenumbruch lesen



  • Ich hab jetzt mal ein bisschen in der FAQ gelesen und rausgekriegt wie das mit dem Textdateien-öffnen und -auslesen geht nun habe ich folgenden Code (Auszug aus dem Hauptprogramm) geschrieben:

    static char cvar1[] = " ";
    static char cvar2[] = " ";
    
    FILE* datei;
    
    datei=fopen("datei.txt","r+"); 
    
    if(datei==NULL) 
    MessageBox(hwnd,"FEHLER beim Öffnen derDatei" ,"FEHLER",MB_OK);
    return -1; 
    
    fseek(datei,0,SEEK_SET); // Cursor an den Anfang setzen 
    
    fgets(cvar1,'/n',datei);     // Text1 bis zum Zeilenumsprung lesen 
    fgets(cvar2,'/n',datei);     // Text2 bis zum Zeilenumsprung lesen 
    
    SendMessage(GetDlgItem(hDlg,IDC_LIST1),LB_ADDSTRING,0,(LONG)(LPSTR)cvar1);  // Text1 auf ListBox
    SendMessage(GetDlgItem(hDlg,IDC_LIST1),LB_ADDSTRING,0,(LONG)(LPSTR)cvar2);  // Text2 auf ListBox
    
    fclose(datei);
    

    Nun möchte ich das alles dynamisch regeln. Das Programm soll auslesen, wieviele Zeilenumbrüche sprich wieviele Elemente es in die Listbox einsetzen muss. Der Code funtioniert soweit ,nur eben mit dieser Einschränkung.

    Meine Frage: Wie kann man auslesen wieviele Zeilenumbrüche ein Programm hat? Ich bin aber auch offen für andere Lösungen.(Trennung nach Semikolon usw., Verbesserungen)

    Danke schon mal im Vorraus,

    finbessel ver.3



  • Vielleicht holst du dir zuerst die dateigröße machst eine schleife und zählst die '\n' und dann kannst du die einzelnen zeilen in ein mehrdimensionales array schreiben (zählen nur damit du dann weist wie groß das array sein soll...)

    ich hoffe ich konnte helfen
    mfg N3R0



  • Ja so würds schon irgendwie gehen; ist aber ehrlich gesagt sehr komliziert. Gibts da keine eigene Funktion ? Man könnte vielleicht auch einfach abfragen ,wann die Datei am Ende ist. Aber wie ?



  • Das geht mit einer (while-)Schleife. 😃



  • JA NATÜLICH ! 😃



  • Ja wie aber dann ?



  • Rückgabewert ist NULL bei Dateiende. 😃 😃





  • also:

    int filesize = 0;
    int count = 0;
    char buffer[filesize]; //musst du mit malloc() freigeben weils sonst net geht..
    filesize = GetFileSize();//die funktion musst du selbst schreiben ka obs eine giebt
    
    //jetz schreibst du die datei in den buffer
    
    for(int i = 0; i <= filesize; i++)
    {
    if(buffer[i] == '\0')
    {
    cout++;
    }
    }
    
    so kannst du schon mal leicht die zeilen zählen
    dann machst du nen mehrdimensionalen array (char array[zeilenlänge][anzahlzeilen])
    und dann schreibst du in jede zeile einen satz...
    
    hast du das so gemeint???
    
    mfg N3R0
    


  • Warum zählst du die \0 und nicht die \n bzw. \r\n ? Oder ist das nur ein Vertipper?

    @finbessel3: Wie bereits gesagt, kannst du doch fgets und SendMessage einfach in eine while-Schleife packen 😉



  • ups shit vertipper^^

    mfg N3R0



  • Danke erstmal aber jetzt hätt ich noch ne Frage:
    Wenn ich nun den Text in die ListBox einlese erscheinen hinten dran so komische viereckige Kästchen. Ich glaube das kommt von den char-NUL-Werten.
    Die Funktion fgets liest ja bis zum /n und dieses gleich noch mit. Wie krieg ich das weg ?



  • Indem du einfach das letzte (evtl. auch die letzten beiden) Zeichen auf '\0' bzw. 0 setzt.
    Also Länge der Zeichenkette ermitteln (falls nicht schon vorhanden) und dann kennst du ja die Position des zu verändernden Zeichens - oder einfach nach dem ersten Vorkommen eines Steuerzeichens suchen und durch 0 ersetzen 😉


Anmelden zum Antworten