Trim - Ersatzfunktion

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Holzchopf

Meisterpacker

Betreff: Trim - Ersatzfunktion

BeitragMi, Aug 23, 2006 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist euch schon einmal aufgefallen, dass die Trim-Funktion, die BB von Haus aus mit sich bringt, auch unmengen an Sonderzeichen (*prust* Umlauten *hust*) wegschneidet Question

Seht selbst:
Code: [AUSKLAPPEN]
txt$ = "  äöèéôïMüîñä    "
Print Trim( txt$ )
WaitKey()


Nun, dem musste ich zwangsläufig entgegenwirken, deshalb habe ich kurzum eine kleine Ersatzfunktion geschrieben:
Code: [AUSKLAPPEN]
Function Trim$( Trm_Str$ )
   Trm_Len = Len( Trm_Str$ )
   If Not Trm_Len Then Return
   For Trm_i = 1 To Trm_Len
      If Asc( Mid( Trm_Str$, Trm_i, 1 )) >32
         Trm_Start = Trm_i
         Exit
      EndIf
   Next
   If Not Trm_Start Then Return
   For Trm_i = Trm_Len To 1 Step -1
      If Asc( Mid( Trm_Str$, Trm_i, 1 )) >32
         Trm_End = Trm_i
         Exit
      EndIf
   Next
   If Trm_End -Trm_Start +1 >0 Then Return Mid( Trm_Str$, Trm_Start, Trm_End -Trm_Start +1 )
End Function


Noch kurze Erklärung zum Code (für alle die, die das ganze komisch finden), für die, dies interessiert:
Alle meine BB-Dateien fangen so an, ich hab mir bei grossen (Include-) Dateien angewöhnt, einen anständigen Header zu schreiben. Deshalb das hohe Kommentar / Codezeile -Verhältnis Rolling Eyes
Trm_ vor allen Variablen in der Funktion hat seine Gründe: 1. Ermöglicht das V-Namen wie Trm_End (wäre ohne Präfix End und somit nicht möglich), *_Str, *_Len und andere kurze, selbsterklärende valide Variablennamen und 2. Verhindert das die Fehlerquote enorm - und zwar in dem Fall, dass eine Globale plötzlich in einer Funktion unbeabsichtigt geändert wird, weil der selbe Name gewählt wurde (Hey, ist euch das etwa noch nie passiert? Wink )

Und nicht vergessen: Mängel bitte sofort melden =)

MfG

Edit: Habs nun so ähnlich gemacht wie SpionAtom, also mit einer Schleife, reicht ja durchaus Rolling Eyes
Edit²: So. Sind wieder zwei Schleifen, gefällt mir persönlich besser...
  • Zuletzt bearbeitet von Holzchopf am Fr, Sep 01, 2006 16:59, insgesamt 4-mal bearbeitet

SpionAtom

BeitragMi, Aug 23, 2006 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, aber das musste ich einfach neuschreiben Wink
Aber dein ordentlicher Stil gefällt mir Cool


Code: [AUSKLAPPEN]

Function Trim2$(t$)   
   x = 1
   y = Len(t$)
   While x <= y And c < 2
    c = 0
    If Mid$(t$, x, 1) = " " Then x = x + 1 Else c = c + 1
    If Mid$(t$, y, 1) = " " Then y = y - 1 Else c = c + 1   
   Wend
   If y - x + 1 > 0 Then Return Mid$(t$, x, y - x + 1)
End Function
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Holzchopf

Meisterpacker

BeitragMi, Aug 23, 2006 22:35
Antworten mit Zitat
Benutzer-Profile anzeigen
mhm gefällt mir, guter Ansatz =) Werd ich später wahrscheinlich irgendwie übernehmen Wink
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Hip Teen

BeitragDo, Aug 24, 2006 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
zwar eine nette Routine, aber hier bei mir in BlitzPlus V. 1.42 macht die Trim Funktion ehrlich gesagt keine Probleme....
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"
 

$tankY

BeitragSa, Aug 26, 2006 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir gibts auch keine Probleme (auch B+), nur werden die Umlaute bei Upper ind Lower nicht größer/kleiner.
 

#Reaper

Newsposter

BeitragSa, Aug 26, 2006 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann macht wohl nur B3D diesen Fehler :-/
Da habe ich ihn nämlich auch Wink
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

TheMatrix

Betreff: Trim Wettbewerb

BeitragDo, Aug 31, 2006 5:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach Schnick-Schnack,
der ganze Code get auch noch kürzer,


Code: [AUSKLAPPEN]

Function trim2$(st$)
 For a=1 To Len(st$)
  buf$=Mid$(st$,a,1) :  If buf$<>" " Then new_st$=new_st$+buf$
 Next : Return new_st$
End Function

Geht nich, gibs net Wink

d-bug

BeitragDo, Aug 31, 2006 8:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Schick, nur leider löscht dein Code alle Leerzeichen und nicht nur die führenden, bzw. angehängten.

Der String
Code: [AUSKLAPPEN]
"   blblblaaaaaaaa  blubsi möps    "

wäre bei dir:
Code: [AUSKLAPPEN]
"blblblaaaaaaaablubsimöps"

sollte aber bei ql:Trim so aussehen:
Code: [AUSKLAPPEN]
"blblblaaaaaaaa  blubsi möps"

ergo: erstmal informieren was ql:Trim eigentlich macht Wink

Für deine Funktion reicht auch eine Zeile:
Code: [AUSKLAPPEN]
MeinString$ = Replace(MeinString$," ","")


cheers

TheMatrix

Betreff: Trim Contest die 2.

BeitragDo, Aug 31, 2006 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut, da magst du vielleicht richtig liegen. Aber ich kann se ja n bizel erweitern. Dann ise immer noch kürzer und übersichtilicher Wink

Code: [AUSKLAPPEN]

Function trim2$(st$)
 For a=1 To Len(st$)
  If Mid$(st$,a,1)<>" " Then s=a : Exit
 Next
 For a=Len(st$) To 1
  If Mid$(st$,a,1)<>" " Then e=a : Exit
 Next : Return Mid$(st$,s,e-s)
End Function
°_° °.° °~° °v° .. -.-

SpionAtom

BeitragDo, Aug 31, 2006 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Es werden nun nicht nachführende Leerzeichen gelöscht. Und ohne die Zeilen-Trennung per Doppelpunkt : hättest du sogar noch eine Zeile mehr als ich Rolling Eyes

EDIT: Habs mal überarbeitet:
Code: [AUSKLAPPEN]
Function trim2$(st$)
 For a=1 To Len(st$)
  If Mid$(st$,a,1)<>" " Then s=a : Exit
 Next
 For a=Len(st$) To 1  Step -1
  If Mid$(st$,a,1)<>" " Then e=a : Exit
 Next : Return Mid$(st$,s,e-s+1)
End Function


Aber von der Idee her, ists ja mein Ansatz. Wink
Nur bei dir fehlt jetzt noch der Sonderfall "" = Leerstring...
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Holzchopf

Meisterpacker

BeitragDo, Aug 31, 2006 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr schön, dann hätte man genau wieder das, was ich hatte bevor ich alles in eine Schleife gepackt habe. Mit der Ausnahme, dass meine Variablen mit Trm_ anfangen ^^

Edit:
So, hab jetzt das ganze nochmal genauer unter die Lupe genommen und bin nach reiflicher überlegung zum Schluss gekommen, das ganze wieder in zwei Schleifen zu packen.

MfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Jan_

Ehemaliger Admin

BeitragDo, Aug 31, 2006 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
so wie alle andern auch?
between angels and insects

Holzchopf

Meisterpacker

BeitragDo, Aug 31, 2006 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
'schuldigung?

Worauf bezieht sich deine Frage jetzt? ^^
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group