Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Stringmanipulation

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Type



Anmeldungsdatum: 24.02.2006
Beiträge: 187
Wohnort: Dresden

BeitragVerfasst am: 27.12.2008, 17:13    Titel: Stringmanipulation Antworten mit Zitat

Hallo Leute,

Ich habe eine Frage zur Stringmanipulation in FreeBasic.
-jaja, ich weis ein leidiges Thema zwinkern -

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, ""?verwundertverwundert???")

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!? mit dem Kopf durch die Mauer wollen
Wichtig ist, dass ich auch nach anderen Formatierungen suchen kann.

MfG Type
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 27.12.2008, 17:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 27.12.2008, 18:25    Titel: Antworten mit Zitat

Hallo,

was du suchst sind keine bloßen Stringmanipulationsfunktionen, sondern du möchtest deiner Beschreibung nach reguläre Ausdrücke in FreeBASIC benutzen. "Von Haus aus" kann FreeBASIC damit nicht umgehen, aber es gibt Bibliotheken zur Verwendung von Regular Expressions. Wie gut diese mit FreeBASIC funktionieren, habe ich aber noch nicht ausprobiert.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 27.12.2008, 18:28    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 27.12.2008, 18:56    Titel: Antworten mit Zitat

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 happy
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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 27.12.2008, 20:32    Titel: Antworten mit Zitat

Hallo,

ich hab auch noch einen Datumsuch-Code gebastelt: http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=775 lächeln

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Type



Anmeldungsdatum: 24.02.2006
Beiträge: 187
Wohnort: Dresden

BeitragVerfasst am: 28.12.2008, 13:54    Titel: Antworten mit Zitat

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! grinsen

P.S.: Die Idee beim Punkt anzufangen und nicht beim ersten Zeichen, war mir noch gar nicht gekommen... Gnade, Gnade!

MfG Type
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz