Textdateien unter MFC C++ anständig schreiben OHNE Dateikonvertierung?



  • 😕
    keine Ahnung hier gibs aber bestimmt welche die den Grund dafür kennen...

    sorry..
    *winke*
    Hellsgore



  • Schuss ins Blaue:
    Schreib vor dem String ein '\xfeff' in die Datei.



  • DENNOCH DANKE HELLSGORE

    habe nun
    CString Vor = "\xfeff"; //Fehlermeldung: 65279 to big for character
    CString Inhalt = Vor + "irgendwas";

    😕



  • muss es vielleicht folgendermassen lauten?? und was ist das dann fuer ein verzeichnis???

    "\\xfeff"



  • Das ist kein Verzeichnis. Das ist ein einzelnes Zeichen. Beachte die einfachen Anführungszeichen.



  • auch mit hochkommas gibt er diesen fehler raus!!

    liegt das vielleicht an embedded c++?



  • im netz stehen da so sachen mit # anstatt des \

    aber auch da mag der compiler nicht mit hochkommas



  • Sorry, mein Fehler.

    CString Vor = L'\xfeff'



  • schön...nu schneidet er mir aber hinten einiges ab!!

    lol

    und nu?



  • Wer ist "er"?
    Was wird abgeschnitten? In etwa die Hälfte?
    Zeig mal den Code fürs Einlesen.



  • dieses datei schreiben und auslesen funktioniert mit char[] einwandfrei ohne eine derartige konvertierung
    nur leider moechten wir gerne CString verwenden da es dort leichter ist zu addieren und sortieren

    vielleicht kann mir wer sagen wie man auf embedded anstaendig einen knapp 1000 zeichen grossen CString in ein char[] schreibt

    dann wuerden wir so die datei schreiben.....ach verdammt....dann kann ich wiederrum die datei nicht schreibschuetzen

    verdammter mist....langsam nervt es!! 👎

    alsomomentan siehts so aus: ⚠

    ich habe eine textdatei welche in etwa so aussieht:
    10002~Reiner Zufall~Gluecksstr. 3Albershausen

    diese zerlege ich momentan mit strtok in ihre einzelkomponenten

    danach schreibe ich sie in irgendwelche editfelder um sie dort zu veraendern und dann wieder zusammenzufuegen
    danach moechte ich sie gerne wieder in eine datei schreiben welche den gleichen namen hat wie die ausgelesene

    nun wird nach anwendung obiger tipps der datensatz beschnitten...und zwar nach genau 13 zeichen
    lade ich diese datei nun wieder rein so kommt nur was echt komisches raus

    ein y mit punkten drauf
    ein b mit einem Strich nach unten wie ein p also quasi b und p ueberlagert
    und eine 1

    also: yb1 in extrem komisch 🙂

    wer kann mir da weiterhelfen???????? brauche es echt dringend

    danke
    guenni



  • der code fuers einlesen:

    m_AnzahlAuftraege =i;
    for (i=0;i< m_AnzahlAuftraege;i++)
    {
    char str[1000];
    CString end;
    end.Format('%.i',i);
    CString dat = Dateien[i];
    dat ="Daten\\Neukunden\" +dat;// ÄNDERN

    CFile datei(dat, CFile::modeRead);
    datei.Read(str, sizeof(str));
    char delimiter1[] ="~";
    char *pointer1;
    pointer1 = strtok(str, delimiter1);
    int k=0;
    m_MatrixOffeneAnfragen[i][k] = pointer1;
    while(pointer1=strtok(NULL, delimiter1))
    {
    k++;
    m_MatrixOffeneAnfragen[i][k] = pointer1;
    }

    m_ControllList.AddString( m_MatrixOffeneAnfragen[i][0]+ " "+
    m_MatrixOffeneAnfragen[i][1] );
    j++;
    datei.Close();
    }
    UpdateData(false);



  • und noch der code zum auslesen:

    CString Vor = L'\xfeff';
    CString Inhalt = Vor + m_Anfrage_nr +"~"+ m_Anfrage_name +"~"
    + m_Anfrage_name1 +"~"+ m_Anfrage_name2 +"~"
    + m_Anfrage_str +"~"+ m_Anfrage_plz +"~"
    + m_Anfrage_ort +"~"+ m_Anfrage_verkaufer;

    unsigned int laenge=Inhalt.GetLength();
    // CString funzt nicht !!!
    // wchar_t str[1000];
    // wcscpy(str,Inhalt);
    CString Dateiname ="Daten\\Neukunden\" + m_MatrixOffeneAnfragen[m_zahl][0] +"KDneu.txt";
    CFile datei(Dateiname, CFile::modeCreate |CFile::modeWrite );
    datei.Write(Inhalt, laenge);
    ::SetFileAttributes(Dateiname, FILE_ATTRIBUTE_READONLY); //da war der Fehler
    DWORD dwError = GetLastError();

    datei.Close();
    UpdateData(false);
    }



  • der originale datensatz zum testen lautet:

    10024~Haus Sylvia~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

    in der datei steht dann: 10024~Haus Sylv

    und nach dem erneuten einlesen: yb1 (in komisch :D) wie oben beschrieben

    du bist unsere einzige hoffnung



  • Wenn du die Datei mit \xfeff am Anfang erstellst, kannst du sie dann mit PocketWord etc. lesen?

    Falls ja, musst du sie anders einlesen. Die Datei ist jetzt nicht mehr ANSI, sondern UNICODE. Du musst mit WCHAR arbeiten, nicht mit char, und mit wcstok statt strtok.

    Ach ja:
    datei.Write(Inhalt, laenge * sizeof(WCHAR));



  • das hoert sich recht gut an....jedoch ist die datei nicht komplett

    habe grad noch ueberarbeitet leider vergessen zu schneiden

    raus kommt 10024~Haus Sylv ⚠

    also geschnitten



  • In laenge steht die Anzahl der Zeichen, Write will die Anzahl der Bytes. Jedes Zeichen eines CString ist unter CE 2 Bytes groß, also:

    datei.Write(Inhalt, laenge * 2);



  • laenge *2

    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHHHHHHAAAAAAAAAAAA!!!!!!!!!

    sowas muss einem ja auch mal gesagt werden 😃 😃 😃 😃 😃

    eh cool wir probieren weiter!!

    melde mich gleich wieder 😃



  • MFK du bist ein Held!!!

    Schreiben funzt 😃 😃 😃 😃 😃

    ABER!!! mit dem erneuten Lesen klappts nicht so recht....

    wenn Du unseren Code abaendern koenntest so dass wir mal vergleichen koennten waere das ein richtig goiler Zug von Dir

    haben so manches WCHAR & WCSTOK probiert und kriegen einfach keine 0 Errors hin 😞

    er hat staendig Konvertierungsprobleme...

    wie gesagt wir wollen Text mit max. 1000 Zeichen einlesen

    VIELEN DANK
    Guenni



  • axso "ER" ist der drecks Compiler 🤡


Anmelden zum Antworten