Split-Funktion

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Wonderer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 107
Registriert: Do, 06. Jul 2006 13:24

Split-Funktion

Beitrag von Wonderer »

Hallo,

ich hatte gerade einen Fehler hier im Datenbestand der daher stammte, dass ich eine (einfache) Split-Funktion nicht zustande gebracht hatte.
(Wert nach letztem Trennzeichen nicht mit betrachtet :oops: )
Jetzt habe ich die Funktion angepasst aber irgendwie sieht das seltsam aus und ich vermute das geht noch einfacher und eleganter!?

Code: Alles auswählen

function FteileText( cText, cTrenner )

local aTexte := {}, nPos

	nPos := At( cTrenner, cText )
	
	if nPos>0
        do while .not. empty( rtrim( cText ) )
			
			if nPos>0
            	AAdd( aTexte, rtrim(ltrim(substr( cText, 1, nPos-1 ))) )
            	cText := substr( cText, nPos+1 )
            else
				AAdd( aTexte, rtrim(ltrim( cText )) )
				cText := ""
			endif
            
            nPos  := At( cTrenner, cText )
        enddo
    else
    	aTexte := { cText }
    endif

return aTexte
von ALLTRIM habe ich hier im Unterforum gerade erst gelesen.. :)
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Split-Funktion

Beitrag von georg »

Also, ich mache das grundsätzlich so:

Code: Alles auswählen

nStart := 1
cWas := ";"
nAt := At(cWas, cWo, nStart)
WHILE nAt > 0
   cTreffer := Substr(cWo, nStart, nAt - nStart)
   nStart := nAt + Len(cWas)
   (Verarbeitungslogik)
   nAt := At(cWas, cWo, nStart)
END
cTreffer := Substr(cWo, nStart)
(Verarbeitungslogik)
Zumindest sinngemäss. Dass die Verarbeitungslogik zweimal drin ist, ist unschön, aber fängt genau die zwei Probleme ab: kein Trennzeichen, letzter Treffer nach dem letzten Trennzeichen.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Split-Funktion

Beitrag von Martin Altmann »

Hmm,
sollte auch so gehen:

Code: Alles auswählen

nStart := 1
cWas := ";"

WHILE (nAt := At(cWas, cWo, nStart)) > 0
   cTreffer := Substr(cWo, nStart, nAt - nStart)
   nStart := nAt + Len(cWas)
   (Verarbeitungslogik)
END
cTreffer := Substr(cWo, nStart)
(Verarbeitungslogik)
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Split-Funktion

Beitrag von georg »

Martin,


das gefällt mir, ich merke an solchen Beispielen immer, dass ich doch von den grossen Kisten herkomme, wo solche Zuweisungen innerhalb eines Schleifenkonstrukts nicht möglich sind.

Aber es gefällt mir auch, weil die Abfrage nur einmal da ist, und damit bei Anpassungen nur eine Stelle zu ändern ist. =D>
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Split-Funktion

Beitrag von brandelh »

empty( rtrim( cText ) )
nur als kleine Anmerkung ... empty() gibt .t. auch bei "leeren" Strings also " " zurück. rTrim() ist also unnötig in diesem Zusammenhang.
Gruß
Hubert
Wonderer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 107
Registriert: Do, 06. Jul 2006 13:24

Re: Split-Funktion

Beitrag von Wonderer »

Ok, ich danke euch. Irgendwie hab ich das Gefühl nach mehreren Jahren Pause im Programmieren hab ich einiges wieder verlernt..
Liegt aber vielleicht auch nur persönlich an mir und meinem schlechten Gedächtnis. Oder der Eifer ist zu groß und ich stolpere über das Quick&Dirty.
An meinem Monitor klebt jetzt ein Post-It mit: "ERST NACHDENKEN & DOUBLE CHECK"... :roll:
Antworten