Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
9816
Anmeldungsdatum: 27.03.2012 Beiträge: 4
|
Verfasst am: 27.03.2012, 19:30 Titel: Ist in FreeBasic ein INPUT aus einem String möglich? |
|
|
Kann man in FreeBASIC durch INPUT einen String parsen lassen - also anstatt aus einer Datei aus einem String lesen und wenn ja wie. Hintergrund: Ich möchte aus einer Datei "Komma" separierte Werte in Zeilen lesen, aber die Zahl der Werte in der Zeile liegt nicht vorher fest und ich möchte jetzt keinen eigenen Parser schreiben. In Pseudo Schreibweise
[ lineinput z$
input from z$ a,b,c,d]
Es wäre hilfreich wenn dann bei nicht mehr vorhandenen Werten "Nichts" bzw. NaN zurückgegeben wird.
Danke im Voraus |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 27.03.2012, 19:37 Titel: |
|
|
INPUT liest nur aus der Standardeingabe (üblicherweise Konsole) oder einer Datei; zum Parsen ist der Befehl nicht gedacht. Nach Komma zerlegen ist aber mithilfe von INSTR gar nicht schwer. Ansonsten kannst du natürlich auch deinen String in eine temporäre Datei schreiben und dann mit INPUT wieder auslesen; das ist dann allerdings schon eine kuriose Vorgehensweise ...
NaN gibt es in FreeBASIC zwar, kommt aber meines Wissens nur bei besonderen Rechenoperationen heraus und niemals beim Umwandeln von String in Zahlenwerte - da wird VAL und Konsorten zu Rate gezogen, und die liefern immer eine Zahl, im Zweifelsfalle 0. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 27.03.2012, 19:45 Titel: |
|
|
Hallo und willkommen im Forum!
Zum Trennen der CSV-Zellen würde sich in dem Fall eine String-Split-Routine sehr gut eignen, die einen String anhand eines Trennzeichens auf ein Datenfeld (Array) aufteilt.
Beispiel:
Code: | Dim As String csv = "123,456,789,343"
' *** Hier Split-Funktionsaufruf einfügen ***
' [...]
' Annahme: Ergebnis der Funktion ist jetzt das Array Zahl().
Dim i As Integer 'Laufindex
' Alle Zahlen im Array durchlaufen - beginnend mit dem kleinsten Index und endend beim größten.
For i = LBound(Zahl) To UBound(Zahl)
Print Zahl(i)
Next i
Sleep: End |
StringSplit-Routinen wurden im Forum und im FreeBASIC-Portal schon öfters gepostet. Eine davon findest du z.B. hier:
http://www.freebasic-portal.de/code-beispiele/string-funktionen/stringsplit-156.html
Lies dir das Code-Beispiel am besten mal in Ruhe durch. Ich denke, mit dem Beispiel wird sich das Problem hier gut lösen lassen.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
9816
Anmeldungsdatum: 27.03.2012 Beiträge: 4
|
Verfasst am: 27.03.2012, 20:18 Titel: |
|
|
Hallo,
danke für den Tip mit String Split (hatte unter parse, tokens gesucht aber nichts gefunden).
Wie ist es eigentlich performancemäßig, wenn ich in einer FOR Schleife durch den String laufe und dann die einzelnen Abschnitte in ein Stringarray speichere? So kann ich dann auch mehrfache Leerzeichen als einen Trenner ansehen. Zeitmäßig dürfte ein VAL() Aufruf ja keinen Unterschied machen, ob er intern im INPUT Befehl oder separat gemacht wird.
Ich hatte gefragt, da ich mich dunkel daran erinnere, INPUT aus einem String schon mal in BASIC (evtl. HP-BASIC) gemacht zu haben.
Viele Grüße
9816 |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 27.03.2012, 20:40 Titel: |
|
|
Hi,
du kannst dir selber ansehen, wie sich FB-Befehle geschwindigkeitstechnisch
(um performant mal zu vermeiden) verhalten: siehe hier
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
|