len(string$) gibt falschen Wert aus

Für allgemeine Fragen zur Programmierung mit PureBasic.
Hypersoft
Beiträge: 22
Registriert: 04.10.2004 16:14

len(string$) gibt falschen Wert aus

Beitrag von Hypersoft »

Hi Leute. Ich habe da etwas merkwürdiges entdeckt. Ich versuche hier mal das Problem zu beschreiben:
Ich erhalte einen String von einem IRC-Server. Diesen lasse ich zu erst in den Arbeitsspeicher und dann in die Variable string$ schreiben. Als nächstes lasse ich mit len(string$) über den Messagerequester die Länge des Strings anzeigen. Danach lasse ich den String zeilenweise auslesen. Die Anzahl der Zeichen in jeder Zeile addiere ich zur Variable StringCounting. Nach dem der String vollständig ausgelesen ist, ist merkwürdiger Weise die Länge von string$ um einiges kleiner als die Länge von StringCounting. Einmal habe ich sogar den String aus dem MessageRequester herauskopiert und die Zeichen gezählt. Diese stimmen mit StringCounting überein. Kann mir das einer erklähren???
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8835
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Eigentlich müsste die Länge von StringCounting kleiner sein als [c]Len(string$)[/c],
da du ja beim Auslesen der einzelnen Zeilen wahrscheinlich nicht die
Zeilenendzeichen mitzählst, also [c]Chr(13)[/c] und [c]Chr(10)[/c], oder?
Hypersoft
Beiträge: 22
Registriert: 04.10.2004 16:14

Beitrag von Hypersoft »

Das habe ich auch gedacht. Aber welche Zeichen könnten von dem befehl len() ignoriert werden? Ich sende heute Abend mal den Quellcode rüber.
Benutzeravatar
Kiffi
Beiträge: 10721
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Zeilentrennzeichen (Chr(13) und Chr(10)) werden von Len() mitgezählt, sind
aber in einem Messagerequester 'unsichtbar', weil sie dort sofort 'interpretiert
werden (also an dieser Stelle bricht die Zeile um).

Also pro Zeilenumbruch musst Du 1 oder 2 Zeichen (je nach
Zeilenumbruchtyp) hinzuzählen.

Grüße ... Kiffi
Hypersoft
Beiträge: 22
Registriert: 04.10.2004 16:14

Beitrag von Hypersoft »

OK, aber das kann nicht das Problem sein, da im Originalstring ja weniger Zeichen angezeigt werden, als tatsächlich vorhanden sind. Das habe ich wie gesagt von Hand nachgezählt. Es entsteht eine Differenz bei ca. 40 Zeichen, der String hat vier Zeilen. Ich möchte nochmal darauf hinweisen, dass es sich um einen String handelt, welchen ich bei der Anmeldung an irc.germany.net erhalten habe. Genauer gesagt ist es der zweite. Ich kann mir das nicht erklähren.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Hast du mal alle Zeichen im Arbeitsspeicher Byteweise ausgeben lassen?
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Hypersoft
Beiträge: 22
Registriert: 04.10.2004 16:14

Beitrag von Hypersoft »

Das hab ich noch nicht probiert, werds aber versuchen. Es dürfte aber doch gar keinen Einfluß darauf haben, weil die Daten aus dem Arbeitsspeicher ja bereits im String enthalten sind und len(string$) weniger Zeichen anzeigt, als eigendlich drin sind.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Ja, aber vielleicht siehst du dann welche Zeichen in deinem String sind und das hilft vielleicht weiter.
Das du den Beispielstring nicht postest wird ja Gründe haben, daswegen frag ich garnicht danach.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Hypersoft
Beiträge: 22
Registriert: 04.10.2004 16:14

Beitrag von Hypersoft »

Das mit dem Quellcode ist so, dass das ganze sehr in ein Programm verwickelt ist und ich nicht das ganze Programm posten möchte, sondern mich auf das wesendliche konzentrieren will. Ich habe jetzt den String, welchen ich empfange, mit addgadgetitem in ein Editorfeld schreiben lassen und siehe da, plötzlich stimmt die kürzere Länge, da die Zeichen, die er im Messagerequester zu viel angezeigt hat, erst beim nächsten durchlaufen der Schleife angezeigt werden. Das klingt jetzt wohl unverständlich ohne den Code und ich hatte heute auch wenig Zeit, aber morgen poste ich das Teil mal.
Antworten