Datei auslesen und Wörter überspringen



  • Ist ehrlich ungetestet - hoffe du erkennst was ich meine:

    stdFileInput.ReadString(strOutput); 
        pos=strOutput.Find("|"); 
    CString english = strOutput.Left(pos); 
    CString Rest = strOutput.Right(pos); 
    pos = Rest.Find("|");
    CString german = Rest.Left(pos);
    CString sentence = Rest.Right(pos);
    


  • Hört sich gut an, schmeckt ihm aber nicht 😞 Habe das übernommen, jedoch zeigt er nur die englischen Wörter an, die anderen beiden nicht...

    Der Code sieht bis jetzt so aus:

    CString strOutput;
    int pos;
    CStdioFile stdFileInput("C:\\1.txt", CStdioFile::modeRead); 
    
    while (stdFileInput.GetPosition() < stdFileInput.GetLength()-1) 
    { 
      stdFileInput.ReadString(strOutput); 
        pos=strOutput.Find("|"); 
    CString english = strOutput.Left(pos); 
    CString Rest = strOutput.Right(pos); 
    pos = Rest.Find("|"); 
    CString german = Rest.Left(pos); 
    CString sentence = Rest.Right(pos);  
    
      m_ctlEn.AddString(english); 
      m_ctlDe.AddString(german);
      m_ctlBsp.AddString(sentence);
    } 
    
    stdFileInput.Close();
    

    Wie gesagt, es wird nur das Listenfeld english angezeigt 😞

    Kannst du mir helfen (oder jemand anders)?

    danke!



  • Tja, komisch, dass es vorher mit den zwei Spalten funktioniert hat. 😕

    Right wurde falsch benutzt, so ist es besser:

    pos=strOutput.Find("|"); 
    	CString english = strOutput.Left(pos); 
    	CString Rest = strOutput.Right(strOutput.GetLength() - pos - 1); 
    	pos = Rest.Find("|"); 
    	CString german = Rest.Left(pos); 
    	CString sentence = Rest.Right(Rest.GetLength() - pos);
    

    Jetzt musst du noch das Replace machen und gut ist.



  • Macht spass, mit dir zu arbeiten 😉 Jedoch gibt es da immernoch ein Prob...

    CString strOutput;
    int pos;
    CStdioFile stdFileInput("C:\\1.txt", CStdioFile::modeRead); 
    
    while (stdFileInput.GetPosition() < stdFileInput.GetLength()-1) 
    { 
      stdFileInput.ReadString(strOutput); 
    
    	pos=strOutput.Find("|"); 
        CString english = strOutput.Left(pos); 
        CString Rest = strOutput.Right(strOutput.GetLength() - pos - 1); 
        pos = Rest.Find("|"); 
        CString german = Rest.Left(pos); 
        CString sentence = Rest.Right(Rest.GetLength() - pos);
    	sentence.Replace('|', ' ');
    
      m_ctlEn.AddString(english); 
      m_ctlDe.AddString(german);
      m_ctlBsp.AddString(sentence);
    } 
    
    stdFileInput.Close();
    

    So sieht der Code aus, jedoch (wie schon vorher auch) kommt eine Fehlermeldung:
    error C2039: 'Replace' : ist kein Element von 'CString'

    Ausgegeben wird jetzt alles im richtigen Listenfeld, jedoch ist bei den Beispielen immmernoch das | davor 😡

    Danke, für deine Hilfe! 👍



  • Wenn es nur DAVOR ist, dann lass es doch gleich beim kopieren weg. 😃

    CString sentence = Rest.Right(Rest.GetLength() - pos - 1);
    


  • Yo, es geht 🙂 Wäre ich gar nicht drauf gekommen, danke für deine Hilfe
    😉
    PK01

    P.S.I´ll be back ⚠



  • SetAt müßte gehen.

    Also
    sentence.SetAt(sentence.GetLength()-1,' ');

    Gruß
    Yvonne



  • Sorry, habe nicht gesehen, daß es schon eine dritte Seite gibt...



  • Aber ich hätte noch eine Frage zu dem Ausdruck
    GetRight(strOutput.GetLength() - pos - 1);

    Wenn strOutput angenommen 20 Zeichen hat und das erste | ist an Position 5, dann müßte doch eigentlich als Rest alles rechts von Position 14 (20-5-1) zurückgegeben werden und nicht rechts von Position 5 oder?
    Aber trotzdem kommt das richtige raus, kann mir jemand erklären wieso, bzw. wo liegt mein Denkfehler?



  • @yvonne: Du hast noch einen Verständnisfehler

    Right will nicht die Anfangsposition haben sondern wieviele Zeichen von rechts aus gesehen kopiert werden sollen. 🙂

    Okay? 🙂



  • 💡 💡 💡
    Danke!!!!!!

    🙂


Anmelden zum Antworten