 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Type
Anmeldungsdatum: 24.02.2006 Beiträge: 187 Wohnort: Dresden
|
Verfasst am: 27.12.2008, 17:13 Titel: Stringmanipulation |
|
|
Hallo Leute,
Ich habe eine Frage zur Stringmanipulation in FreeBasic.
-jaja, ich weis ein leidiges Thema -
Also:
Ich habe einige Strings, in denen ein Datum vorkommt.
Zum Beispiel so:
Code: | text1 = "Der 25.06.1967 ist mein Geburtstag"
text2 = "Am 07.12.2065 geht die Welt unter." |
Jetzt möchte ich nur die Daten aus den Strings auslesen.
Quasi mit solch einer Funktion:
Code: | GetStr (text, ""? ???") |
Wer PHP kennt, dem wird das sicherlich bekannt vorkommen... - Ich glaube da gibt es auch so eine Funktion. Wie lässt sie sich in FreeBasic nachbauen?
Bis Jetzt bin ich soweit gekommen:
Code: | FUNCTION GetStr(BYVAL GetStrText AS STRING, GetStrFormat AS STRING) AS STRING
DIM AS INTEGER a,b
DIM AS STRING EndString
FOR a = 1 TO LEN(GetStrText)
FOR b = 1 TO LEN(GetStrFormat)
IF MID(GetStrFormat,b,1) <> "?" AND MID(GetStrText,a,1) = MID(GetStrFormat,b,1) THEN
EndString += MID(GetStrText,a,1)
ELSEIF MID(GetStrFormat,b,1) = "?" THEN
'Hier geschieht ein Wunder!
END IF
NEXT b
NEXT a
RETURN EndString
END FUNCTION |
Aber was mache ich jetzt mit den Fragezeichen!?
Wichtig ist, dass ich auch nach anderen Formatierungen suchen kann.
MfG Type |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.12.2008, 17:46 Titel: |
|
|
in php gibt es meines wissen nach keine funktion, um daten aus einem string rauszufischen. es gibt aber in FB wie in PHP eine Funktion, um Daten in timeserials umzuwandeln (siehe datetime.bi).
ansonsten, wenn es dir nur um Daten à la "xx.xx.xxxx" geht (ab hier sollte doch schon alles klar sein), suche den string nach punkten ab und überprüfe, ob dazwischen 1 oder 2 Zeichen liegen (3.12, 03.12, 30.5, ...) und prüfe, ob das dazwischen auch wirklich zahlen sind (if val(text) > 0 then...). _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 27.12.2008, 18:28 Titel: |
|
|
ytwinky erwähnte einmal, dass die RegExpr langfristig auf der FB-Planungsliste stehen, was ja schön wäre (genaueres weiß ich nicht, bin nicht oft im englischen Forum).
Code: | MID(GetStrFormat,b,1) |
geht auch schneller mit GetStrFormat[b-1], wobei letzteres aber den ASCII-Wert zurückliefert. Gerade bei einer solchen Funktion, die vermutlich viele Vergleiche von Einzelzeichen vornimmt, wird sich das geschwindigkeitsmäßig lohnen.
Möglich wäre ja eine Suche mit INSTR, aber ich kann mir auch vorstellen, einfach den ganzen String Zeichen für Zeichen durchzugehen und mir anzusehen, was für eine Art Zeichen da steht (Punkt, Ziffer, anderes Zeichen). Wenn du die richtige Kombination
Ziffer (Ziffer) PUNKT Ziffer (Ziffer) PUNKT Ziffer Ziffer (Ziffer Ziffer)
gefunden hast, ist das das potentielle Datum. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
The_Muh aka Mark Aroni

Anmeldungsdatum: 11.09.2006 Beiträge: 718
|
Verfasst am: 27.12.2008, 18:56 Titel: |
|
|
Hab mir mal die freiheit genommen und nen kleines Beispiel gebastelt... Allerdings mit "MID" (was recht CPU-lastig is). Bitte nich über den Code meckern, den hab ich einfach mal so Hingeklatscht.
Code: |
function is_int(value as string) as integer
dim as integer dummy
if asc(value) >= asc("0") and asc(value) <= asc("9") then
dummy = -1
else
dummy = 0
end if
return dummy
end function
FUNCTION GetDate(datum as string, trennzeichen as string, parts as integer) AS string
dim rueckgabe as string
dim suchpos as integer
dim dummy as string
dim part as integer = 1
dim date_part(1 to parts) as string
dim as integer hit = 1
while suchpos <= len(datum)
suchpos += 1
dummy = mid(datum, suchpos, 1)
if part = parts and is_int(dummy) = 0 then exit while
if is_int(dummy) then
date_part(part) += dummy
end if
if mid(datum, suchpos,1) = trennzeichen then
part += 1
end if
wend
for i as integer = 1 to ubound(date_part)
rueckgabe += date_part(i) & trennzeichen
next
return left(rueckgabe, len(rueckgabe)-1)
END FUNCTION
locate 1,1
print GetDate("muh 23.04.2009 bli bla blubb 1234", ".", 3)
print GetDate("blubb 12:34:56:78 muh 12 muh 12.12", ":", 4)
print GetDate("blubb 123-009-124 test","-", 3) |
Sogar mit Beispielen was der Code kann
Allerdings nimmt er immer nur den ersten Treffer der passt. (und ich hab nich ausprobiert was passiert wenn im string vor dem gesuchten format ne zahl steht, warscheinlich nix gutes).
*schonmal in den Bunker verkriech*
mfg
The_Muh
*Helm aufsetz*
/edit jepp... vor dem gesuchten format sollte keine zahl stehen... =/ _________________ // nicht mehr aktiv // |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Type
Anmeldungsdatum: 24.02.2006 Beiträge: 187 Wohnort: Dresden
|
Verfasst am: 28.12.2008, 13:54 Titel: |
|
|
Hallo Leute,
Es ist nicht so ganz 100%ig das, was ich wollte (denn eigentlich hab ich genau nach einer Funktion für reguläre Ausdrücke gesucht), aber die Codebeispiele von euch, reichen mir vollkommen aus.
Damit kann ich mir -zumnidest für die Informationen, die ich aus meinen Strings auslesen will- den Rest selber zusammenbauen.
Danke!
P.S.: Die Idee beim Punkt anzufangen und nicht beim ersten Zeichen, war mir noch gar nicht gekommen...
MfG Type |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|