Kommagetrennte Werte aus Textdatei einlesen



  • Hallo!
    1. Frage: Hat jemand eine Ahnung wie ich aus einer Textdatei kommagetrennte Werte(Vorname;Nachname;Strasse;Plz;Ort) so einlese, dass ich jeden eingelesen String auf deren Länge hin überprüfe. Den Import realisiere ich über ein Listenfeld was auch wunderbar klappt. 2. Frage: Wie kann ich eine Fehlermeldung ausbringen oder eine Zeile überspringen wenn in der Textdatei ein blödsinn eingetragen ist zb.,,, ..;;: Manfred;; Bauer.;

    CStdioFile m_Datei;
    CString strZeile;

    CFileDialog *pDateiDlg = new CFileDialog(TRUE );

    if (IDOK == pDateiDlg->DoModal())
    {
    CString DateiName = pDateiDlg->m_ofn.lpstrFile;
    if( !m_Datei.Open( DateiName, CFile::modeRead | CFile::typeText ) ) //Datei wird für lesen geöffnet
    {
    AfxMessageBox("Kann Datei nicht öffnen!");
    exit(0);
    }
    else
    {
    while (m_Datei.ReadString(strZeile)) //Zeilen einlesen
    {

    CString vorname, nachname, strasse, plz, ort; //initialisieren

    int x = strZeile.Find(";",0);
    vorname = strZeile.Left(x);
    int anz = strZeile.Find(";",x + 1);
    nachname = strZeile.Mid(x + 1, anz - x-1); //Position von ; berechnen und löschen
    int anz1 = strZeile.Find(";",anz + x );
    strasse = strZeile.Mid( anz +1, anz1 - anz-1);
    int anz2 = strZeile.Find(";",anz1 + 1);
    plz = strZeile.Mid(anz1 + 1, anz2 -anz1 - 1);
    int anz3 = strZeile.Find(";",anz2 + 1);
    ort = strZeile.Mid(anz2 + 1, anz3 + anz2 -1);

    // listcontrol wird gefüllt
    m_listcontrol1.InsertItem(0,vorname);
    m_listcontrol1.SetItem(0,1,LVIF_TEXT,nachname,0,0,0,0);
    m_listcontrol1.SetItem(0,2,LVIF_TEXT,strasse,0,0,0,0);
    m_listcontrol1.SetItem(0,3,LVIF_TEXT,plz,0,0,0,0);
    m_listcontrol1.SetItem(0,4,LVIF_TEXT,ort,0,0,0,0);



  • Hi,

    hast du mitlerweile eine Lösung für Dein Problem gefunden?
    Ich versuche genau das gleiche zu machen, schaffe es jedoch nicht?

    mfg
    Siggi



  • Mit ::strtok(..) kannst Du Strings splitten.

    Shaggy



  • shaggy: Wenn du nicht im Bilde über die MFC bist dann lasse bitte solche hilfen.

    wolfi28:

    Schreibe dir eine Funktion de du nur den eingelesenen String übergibst.
    Mit Find, Mid bist du weiters auf dem richtigen weg um eine string zu zerlegen



  • @Unix-Tom: Natürlich bin ich über MFC im Bilde und ich glaube nicht, dass es verboten ist bei MFC-Programmierung mal keine Klassen und Objekte zu verwenden. Vor allem wenn Funktionen, wie z.B. strtok(), dort fehlen. Und - by the way - ist jemand, der hier im Forum Fragen stellt, über jede Antwort erfreut.

    Warum das Rad neu erfinden? Geht es nicht auch darum?

    Shaggy


Anmelden zum Antworten