char an strings anhängen



  • Hallo,

    ich versuche in einer sdi Anwendung strings mit Inhalt zu füllen. Ich habe erst die strings mit "CString Dateiname (_T,"")" initialiesiert, nach dem Einlesen einer Datei soll der Inhalt einer Zeile der in "char inhalt[1500]" steht an den zugehörigen String angefügt werden. In einer Konsolenanwendung habe ich das mit string.assign gemacht, aber das scheint es hier nicht zu geben, kann mir da jemand weiterhelfen? 😕
    Habe jetzt mal versucht das ganze mit string.appendChar zu realisieren, das Programm stürzt aber beim öffnen der Datei immer ab. Könnte das sonst an etwas anderem liegen? datei.getline müsste doch eigentlich funktionieren, oder ?

    Gruß,
    Luje


  • Administrator

    Eh? Wo liegt nun das Problem? Beim öffnen und auslesen der Datei oder beim Anhängen des chararrays?

    Also zum anhängen:

    CString strText = _T("Ein String"); // Ein CString Objekt.
    char cz[20] = _T(" wird gefüllt!"); // Ein Chararray.
    
    strText += cz;    // Anhängen des Chararrays an den CString. (einfacher geht es nicht ^^)
    

    Und wenn da noch ein Problem ist mit dem öffnen und auslesen der Datei, gib uns etwas code, damit wir auch einen Fehler erkennen können. Wir sind keine Hellseher *g*

    Grüssli



  • naja das simpelste was eigendlich auf anhieb gehen sollte wäre

    CString sString;
    char    cChar[1024]="das ist ein sssssssseeeeeeehhhhhhrrrrrr langer string";
    sString.Format("%s",cChar);
    MessageBox(sString);
    

    oder einfaches anfügen geht so

    CString sString="Ich bin kurz & ";
    char    cChar[1024]="das ist ein sssssssseeeeeeehhhhhhrrrrrr langer string";
    sString += cChar;
    MessageBox(sString);
    

    mfg
    LowFly


  • Administrator

    LowFly schrieb:

    naja das simpelste was eigendlich auf anhieb gehen sollte wäre

    CString sString;
    char    cChar[1024]="das ist ein sssssssseeeeeeehhhhhhrrrrrr langer string";
    sString.Format("%s",cChar);
    MessageBox(sString);
    

    Simpleste? Also simpleste wäre wohl das hier:

    CString strText;
    char cChar[1024] = _T("Irgend ein längerer oder halt einfach einen String");
    strText = cChar;
    

    Grüssli :p



  • Danke danke, wusste garnicht dass C++ auch mal verständlich sein kann 😃
    Dazu doch noch zwei kleine Fragen, kann ich nur einen Teil des strings anhängen, in dem Fall ab Zeichen 15 bis zum Schluß? also "+=inhalt 15 bis ende"
    Kann ich dann das Ganze in einer for-Schleife mit nem switch einlesen, so siehts aus: for(datei.getline(inhalt,100);!datei.eof();datei.getline(inhalt,100))
    {
    switch (inhalt[0])
    {
    case 'A':
    string+=inhalt [15 bis ende];
    break;
    }
    }

    usw.

    Beste Grüße,
    Luja



  • 😮
    jo noch simpler als format 😃
    servusli 🙄



  • kuck dir mal die class CString an die bietet solche schönen sachen wie .Find() oder .Mid() .Reversfind() an.

    für string von zeichen 15 bis ende wäre zb.

    CString sString="Wieder ein Seeeehhhhhrrrr langer string", sNewstring;
    sNewString = sString.Mid(15,sString.GehtLength());
    MessageBox(sNewString);
    

    von einem char einen Teil auslesen würde ich so machen.

    char cChar[1024]="Einfach eine sinlose zeile text mit schreibfehlern!!";
    CString sString;
    for(int nloop=15;nloop<=strlen(cChar);nloop++)
         sString+=cChar[nloop];
    

  • Administrator

    @LowFly ... Ich hätte wohl sogar noch eine einfachere Lösung, bzw. ich ergänze. :p

    @Luja, du benutzt einen Stream zum auslesen der Datei oder? Also C++ Style. Aber wenn du schon in der MFC bist, schau dir doch mal CStdioFile an.

    CStdioFile File;
    if(File.Open(_T("C:\\IrgendeinOrdner\\EinFile.txt"), CFile::modeRead))
    {
        CString strText, strResult;
    
        while(File.ReadString(strText))
        {
            strResult = strText.Mid(15, strText.GetLength());
    
            // Was auch immer du nun mit dem strResult anfangen willst ^^
        }
    
        File.Close();
    }
    

    Grüssli



  • LowFly schrieb:

    von einem char einen Teil auslesen würde ich so machen.

    char cChar[1024]="Einfach eine sinlose zeile text mit schreibfehlern!!";
    CString sString;
    for(int nloop=15;nloop<=strlen(cChar);nloop++)
         sString+=cChar[nloop];
    

    Wenn man sich die Organisation von C-Strings (char-Arrays) ansieht, geht DAS sogar noch einfacher:

    char cChar[1024]="Einfach eine sinlose zeile text mit schreibfehlern!!";
    CString sString = "Meine Zeile lautet: ";
    sString += (cChar+15);
    

    (btw solltest du im Zusammenhang mit CString lieber TCHAR verwenden - Stichwort UNICODE)


Anmelden zum Antworten