Problem mit ASCII Zeichen



  • rowisoft schrieb:

    Eintrag.Prüfernummer= ,,12345" & CHR(0).

    Warum verbindest du 2 Strings eigentlich mit dem & operator???

    Vielleicht, weil das VB-Code ist?

    Gruß,

    Alexander



  • Danke Robert,

    und wenn sich Klaus noch mal das ursprüngliche Posting ansieht, wird er feststellen, dass Maik INNERHALB eines AnsiStrings mehrere \0 haben will (darauf läuft es hinaus).

    Und das machen die Stringklassen einfach nicht mit. Die Länge des Strings wird zwar weiterhin korrekt angezeigt, aber alle Ausgabeoperationen enden beim ersten vorkommen von \0 im String. Seufz.



  • Hallo Joe!

    Das mit dem Nullbyte ist mir schon klar, dass das nicht funktioniert, das habe ich ja auch nicht bezweifelt.
    Ich habe lediglich geschrieben, weil mir die Sache mit dem & operator so ins Gesicht gesprungen ist, dass ich mir dachte "was soll das denn?"

    Aber wenn das dann VB Code ist, hat sich die Sache eh erledigt...

    Zum Thema mit \0 in Strings, habe ich hier im Forum auch schon einmal ein Posting gesehen. Dort wollte wohl irgendjemand den String wieder der Reihe nach auslesen, der \0 en enthalten hat. Hat natürlich nicht funktioniert.

    Im übrigen wird auch über die Funktion .Length() nicht die korrekte Länge des Stringinhalts ausgegeben, sondern wieder lediglich nur bis zum Nullbyte!
    (verwendet intern wahrscheinlich auch nur die Funktion strlen oder so...)

    tschüss
    Robert



  • Folgende Testroutine:

    AnsiString test; 
    	test = "Hallo"; 
    	Memo1->Lines->Add(test); 
    	Memo1->Lines->Add(AnsiString(test.Length())); 
    	test[test.Length()] = 0; 
    	Memo1->Lines->Add(test); 
    	Memo1->Lines->Add(AnsiString(test.Length())); 
    	test += "xxx"; 
    	Memo1->Lines->Add(test); 
    	Memo1->Lines->Add(AnsiString(test.Length()));
    

    ergibt folgende Ausgabe im Memo:
    Hallo
    5
    Hall
    5
    Hall
    8



  • Hallo!

    Ich habs ausprobiert mit:
    String test = "Hall\0o du da";
    ShowMessage(IntToStr(test.Length());

    und da wird 4 zurückgegeben. Kann aber evtl. auch daran liegen, dass zur Compilzeit der Rest des Strings abgeschnitten wird, oder die Zuweisung später nur bis zum Nullbyte in die chars kopiert.

    tschüss
    Robert



  • rowisoft schrieb:

    Kann aber evtl. auch daran liegen, dass zur Compilzeit der Rest des Strings abgeschnitten wird

    Korrekt. Meine Version 'manipuliert' den String zur Laufzeit. Deshalb das unterschiedliche Ergebnis.

    Grüße Joe



  • Nur mal so eine unschuldige Frage: Warum um alles in der Welt, wollt ihr inmitten eines Strings ein Nullbyte?



  • Wir nicht, der Maik will 'mit Bodmitteln' eine Datei erstellen, bei der eine Zeile einen Datensatz darstellt in dem mehrere 'Strings' stehen, die durch ein \0 getrennt sind... Und mit Bordmitteln a la TMemo->Lines->SaveToFile() geht das eben nicht.



  • Ahja. Und funktioniert deine Lösung auch beim Speichern? Kann ich mir irgendwie nicht vorstellen. Außerdem: gehören die normalen Schreib/Lesemethoden von z.B. TFileStream nicht auch mit zu den "Bordmitteln"?



  • ja, genau das hab' ich ihm in meiner ersten Antwort zu seinem ersten Posting (er hat 2 zu dem Thema gemacht) schon geschrieben...



  • Hi,
    @Maik Vogt: Wenn Deine "Programmvorlage" es tatsächlich vorschreibt, daß Deine Variablen (Prüfnummer, Typ u.s.w.) durch ein 0-Byte voneinander getrennt werden müssen, macht die Verwendung der AnsiString-Klasse keinen Sinn, was in diesem Thread bereits zur Sprache kam. Das ist aber nicht weiter tragisch, da Deine Record-Struktur recht einfach aussieht.
    Hier ein Vorschlag (ungetestet und es geht sicherlich weitaus eleganter):

    char record[6 + 1 + 2 + 1 + 11 + 1 + 5 + 1 + 11 + 1 + 9 + 1 + 15 + 1];
    String pruefernummer = "123456";
    String typ = "78";
    int offset = 0;
    for (int i=0; i < pruefernummer.Length(); i++)
    {
        record[i] = pruefernummer[i + 1];
    }
    record[6] = '\0';
    offset = 7;
    for (int i=0; i < typ.Length(); i++)
    {
        record[offset + i] = typ[i + 1];
    }
    record[9] = '\0';
    //u.s.w....
    


  • @dschnesky:

    Heißt Du zufällig Jan mit Vornamen?



  • Joe_M. schrieb:

    Heißt Du zufällig Jan mit Vornamen?

    Verdammt, ich bin enttarnt!! 🙂
    Wieso?



  • Wir kennen aus dem Entwickler-Forum. Allerdings hab' ich mich hier erst mal 'inkognito' angemeldet... Ich bin Jochen Reichenberg.

    Grüße und Schönes Wochende


Anmelden zum Antworten