Effekt bei stringfield () mit Trim ()

Für allgemeine Fragen zur Programmierung mit PureBasic.
reiner jakob
Beiträge: 23
Registriert: 03.08.2010 15:15

Effekt bei stringfield () mit Trim ()

Beitrag von reiner jakob »

ich habe folgenden Effekt in Verbindung von Stringfield () und Trim ().
Auch zuerst den String an A$ übergeben und dann Trim () ausführen ändert nichts.

; Windows 7 64 Bit Rechner 32 bit Purebasic Version 5.2 LTS(x86)

Code: Alles auswählen

a$ = Trim(StringField(~"ABC   \t/   Franz",1,"/"))


Debug "*"+a$+"*"
;*ABC   	*

Debug Len (a$)
;7

For i=1 To Len(a$)
  Debug Asc(Mid(a$,i,1))
Next
; 65
; 66
; 67
; 32
; 32
; 32
; 9
Sieht jemand eine Lösung das Problem vorübergehend zu umgehen.

Edit by NicTheQuick: Code-Tags gesetzt und Tab wiederhergestellt, da das Forum Tabs in Spaces umwandelt
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: Effekt bei stringfield () mit Trim ()

Beitrag von #NULL »

Du hast nicht gesagt was du erreichen willst. Und die tatsächliche Debug-Ausgabe stimmt nicht mit deinen Kommentaren überein:

Code: Alles auswählen

*ABC*
3
65
66
67
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Effekt bei stringfield () mit Trim ()

Beitrag von NicTheQuick »

Das ist kein Bug. Trim() entfernt standardmäßig nur Leerzeichen. Da das letzte Zeichen vor dem "/" bei dir aber ein TAB ist, klappt das nicht. Trim kann zwar auch andere Zeichen als nur Leerzeichen entfernen, aber man kann ihm leider keine ganze Klasse von Whitespaces übergeben:

Code: Alles auswählen

; Entfernt nur die Leerzeichen
Debug "*" + Trim(~"ABC   \t") + "*"
; Entfernt nur das Tab
Debug "*" + Trim(~"ABC   \t", ~"\t") + "*"
Zwei geschachtelte Trims werden auch nicht zum Erfolg führen, da das nicht funktioniert, wenn abwechselnd Tabs und Spaces enthalten sind.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Effekt bei stringfield () mit Trim ()

Beitrag von NicTheQuick »

Ich hab dir mal ein Trim gebastelt, was deinen Ansprüchen genügen sollte:

Code: Alles auswählen

Procedure.s TrimW(text.s)
	Static whiteSpaces.i = %100000000000000000010111
	Protected *c.Character = @text, *b
	While *c\c And *c\c < 33 And whiteSpaces & (1 << (*c\c - 9))
		*c + SizeOf(Character)
	Wend
	*b = *c
	*c = @text + (Len(text) - 1) * SizeOf(Character)
	While *c > @text And *c>=*b And *c\c < 33 And whiteSpaces & (1 << (*c\c - 9))
		*c - SizeOf(Character)
	Wend
	ProcedureReturn PeekS(*b, (*c - *b) / SizeOf(Character) + 1)
EndProcedure

Debug TrimW(~"   \t\vHallo!\r\n  ")
Das entfernt horizontale und vertikale Tabs, Zeilenumbrücke, Wagenrückläufe und natürlich Leerzeichen am Anfang und Ende von Texten.

Außerdem verschiebe ich den "Bug" in ein anderes Forum.
Bild
reiner jakob
Beiträge: 23
Registriert: 03.08.2010 15:15

Re: Effekt bei stringfield () mit Trim ()

Beitrag von reiner jakob »

Tja, erst mal danke

ich habe mir irgenwie das Tab ( 9 ) reingemogelt, beim suchen den Fehler weiterkopiert, und sogar selbst angezeigt, aber zu blöd gewesen die den richtigen Schluss zu ziehen. Danach bei dem Wunsch den Fehler vernünftig zu dokumentieren auch noch falsche Zeichen dazu eingetragen und vergessen die weg zu löschen.

Nochmals Danke und Entschuldigung für meine Dummheit.
Antworten