Datei zeilenweise einlesen



  • Hi

    Jo suche schon lange ne möglichkeit eine Zeile einer Datei irgednwie zeilenweise einzulsen? Irgendwie scheint es da keine eindache Funktion für zu geben. oder keiner kennt sie 🙂

    Das erst mal das erste Problem

    Wie kann ich diese Datei zerschnippel und immer an einem bestimmten zeichen trennen und in ein array packen?
    Beispiel: Hallo*.*du*.*da
    soll in ein array gepackt werden und zwar jedes einzeln 😞



  • Zu 1) Du kannst die Datei mit der CStdioFile und ReadString Zeilenweise lesen.
    zu 2) Den String auseinander schneiden kannst du mit Left, Right, Mid der CString Klasse



  • hmmm? die funktion sind mit bekannt? aber auf zweilenweise bin ich da irgednwie noch nicht gestoßen? Kleines Codeschnippelchin?



  • ReadString liest bis zum nächsten \n ein.
    Man könnte es auch ReadLine nennen, das würde die Funktion besser beschreiben. 😉

    Such doch mal nach *ReadString* da gibt es bestimmt was. 🙂



  • hier ein codeausschnitt aus meinem proggie, das liesst die zeilen schrittweise und nach zeichen aus, und dazu noch mit if bedingungen

    if (CReadDBDlg::m_initialisierung == FALSE)
    { int lo;
    int eing=0;
    while (eing<=5000) //5000 Datensätze
    {
    lo=0;
    while (lo<=20)
    {
    //nr[eing].be[lo]=' ';
    nr[eing].gm[lo]=' ';
    nr[eing].ro[lo]=' ';
    nr[eing].st[lo]=' ';
    nr[eing].yy[lo]=' ';
    nr[eing].xx[lo]=' ';
    nr[eing].rz[lo]=' ';
    lo++;
    }

    eing++;
    }
    CReadDBDlg::m_initialisierung = TRUE;}

    //m_rep="c://koord655.rep";
    char text[502];//eingelesene zeile wird hier gespeichert
    text[500]=' ';
    int ll=0; //gibt position in nr.be


    int schon=0; //schonmal alle ------- gehabt ?
    int zeile=0; // gibt an, wieviele zeilen durchlaufen wurden
    int i=0; //gibt position der zeile wieder
    int zeilenbedingung=1; //ist ächte zeile ein datensatz?
    int temp=0; //zählt ob 60 '-' hintereinander kommen
    int start=0;char kk;kk=65; //start=startposition zum eintrage in lise eines wertes,kk zur überprüfung, geört nicht zum programm
    m_typ=0; //welcher typ wird gerade gelesen
    m_wert=0; //gibt zeile nr[].be eine nummer in der fertigen tabelle
    int werft=0;
    while (i<=498) //alle text[200] auf ASCII 0 Setzten
    {
    text[i]=' ';
    i++;
    }

    std::ifstream in("c://koord655.rep"); //Pfadangabe der rep datei
    while (zeile<=100) //für insgesam 100 zeilen das testproggie
    {

    in.getline(text,200);zeile++; //die ersten 200 zeichen auf der 1. zeile auslesen
    i=0;

    while (i<=200) //Zeile auf 200 Zeichen länge ablesen
    {
    if (text[i]==45 || schon==1) //in den 200 zeichen nach ASCII '-' suchen
    {
    temp++; //wenn '-' dann temp 1 hinzufügen, ansonsten Null setzen
    if (text[i+1]!=45 && temp<=60){temp=0;}

    if (temp>=59) //wenn '-' mehr als 59 mal vorgekommen ist
    {

    while (zeilenbedingung==1) //100 leerzeichen
    {int bb=4;
    zeilenbedingung=0;
    while (bb<=101 )
    {
    if (text[bb]!=' ')
    {zeilenbedingung=1; }
    bb++;
    }

    i=0;
    while (i<300) //alle text[200] auf ASCII 0 Setzten
    {
    text[i]=' ';
    i++;
    }
    i=0;
    in.getline(text,200);zeile++; //nächste zeile einlesen
    while (i<=200)
    {
    if (text[i] != ' ') //wenn Zeichen auf der Zeile Nicht leer ist
    {
    ll=0;
    int star=i; //variable merkt sich die anfangs i position
    int t=1; //Laufvariable

    while (text[i]!=' ')
    {
    i++;
    } //i=endeposition
    i--;m_typ++;
    while (star <= (i)) //solange startvariable kleiner ist wird der Bichstabe hinzugefügt
    {

    char lol;

    lol=text[star];
    if (m_typ==6)
    {nr[werft].gm[ll]=lol;}
    if (m_typ==5)
    {nr[werft].st[ll]=lol;}
    if (m_typ==4)
    {nr[werft].ro[ll]=lol;}
    if (m_typ==3)
    {nr[werft].yy[ll]=lol;}
    if (m_typ==2)
    {nr[werft].xx[ll]=lol;}
    if (m_typ==1)
    {nr[werft].rz[ll]=lol;}

    star++;
    //kk=66;
    ll++;;
    schon=1;

    }

    if (m_typ==6) {werft++;m_typ=0;}

    }
    i++;

    //m_kontrolle=CReadDBDlg::nr[2].be;
    } }

    }

    }

    i++;

    }

    }



  • Hilfe ...



  • @Admiralis:
    So ein Unsinn!
    Wir sind hier im MFC-Forum, was soll da dein Code mit STL? Dazu noch ohne Code-Tags oder Erklärung.
    @Fragesteller: Wie bereits erwähnt: Öffne die Datei mit CStdioFile und lese mit ReadString aus ihr.
    Weiteres sagt dir die MSDN.


Anmelden zum Antworten