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:

Auslesen bis zu einem Zeichen(Instr, Mid)

 
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
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 19.07.2011, 19:44    Titel: Auslesen bis zu einem Zeichen(Instr, Mid) Antworten mit Zitat

Hey

Ich habe eine Datei geöffnet, in dem verschiedene Sachen gespeichert sind. Die Datei sieht so aus:
Code:
Person1 wohnland, wohnort
Person2 wohnland, wohnort
...

Nun möchte ich natürlich in meinem Programm "wohnland" und "wohnort" auslesen. Ich muss also erstmal bis zum Komma auslesen um "wohnland" herauszubekommen. Aber wie? Habe das so versucht:
Code:
Var ff=Freefile
Dim Shared As String lin
Open "test.txt" For Input As #ff
Do Until Eof(ff)
   Line Input #ff,lin
   If Instr(Ucase(lin),person1.title) Then
      person1.wohnland=Mid(lin,5)
      person1.wohnort=MID(lin,6+Len(person1.wohnland))
      Print person1.title+" lebt in "+person1.wohnland+" , "+person1.wohnort
   End If
   Sleep 1
Loop
Close #ff

Funktioniert leider nicht. neutral
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 19.07.2011, 19:57    Titel: Antworten mit Zitat

Was ist person1.title? Wenn du das Komma suchst, hätte ich INSTR(lin, ",") verwendet.
Code:
komma = INSTR(lin, ",")
ersterTeil = left(lin, komma-1)
zweiterTeil = mid(lin, komma+1)

_________________
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
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 19.07.2011, 20:14    Titel: Antworten mit Zitat

Hallo,

man könnte das z. B. ungefähr so machen:

Beispieldaten personen.txt
Code:
BaerbelBasic DE, Musterhausen
GiselaGit CH, Reposi
PeterProbe DE, Trollingen
hallo welt
test,,,,
Fehler Zeile Hier
OskarOverflow DE, Buggingen
FridaFloat AT, Gleitkombach


Code:
'Achtung: Quick'n'dirty Code!
'Annahme: Personenbezeichnungen enthalten keine Leerzeichen.
'Ansonsten muesste man es ein bisschen anders machen.
Dim As Integer f = FreeFile, ErstesLeerzeichen, Komma
Dim As String Zeile, Gesucht, PersonenName, Land, Wohnort
Input "Wer wird gesucht? (z.B. PeterProbe) ", Gesucht
Open "personen.txt" For Input As #f
Do Until Eof(f)
    Line Input #f, Zeile
    If Zeile = "" Then Continue Do 'Leerzeile. Also direkt zur naechsten Zeile!
    ErstesLeerzeichen = INSTR(Zeile, " ")
    If ErstesLeerzeichen < 1 Then Continue Do 'Fehler. Also auf zur naechsten Zeile!
    PersonenName = LEFT(Zeile, ErstesLeerzeichen-1)
    Komma = INSTR(ErstesLeerzeichen, Zeile, ",")
    If Komma < 1 Then Continue Do 'Fehler. Also auf zur naechsten Zeile!
    Land = TRIM(MID(Zeile, ErstesLeerzeichen + 1, Komma - ErstesLeerzeichen - 1))
    Wohnort = TRIM(MID(Zeile, Komma + 1))
    If PersonenName = Gesucht Then Color 12
    Print chr(34); PersonenName; chr(34); " "; chr(34);
    Print Land; chr(34); " "; chr(34); Wohnort; chr(34)
    If PersonenName = Gesucht Then Color 7
Loop
Close #f
sleep
End


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
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 19.07.2011, 20:53    Titel: Antworten mit Zitat

Aww, zu nett. Danke euch beiden. lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 20.07.2011, 18:51    Titel: Antworten mit Zitat

wenn das so weitergeht, solltest du dir wirklich irgendeine reg-exp-library holen. reg-exps schauen zwar gruselig aus, machen dir aber das leben definitiv einfacher

da könntest du zum beispiel mit "\([^ ]*\) \([^,]\), *\(.*\)" suchen und dir \1, \2 und \3 (wenn einer, der wirklich was von regexps was versteht das sieht: ich kenne die teile nur von sed. kA ob sed seinen eigenen "slang" hat) holen. ich weiß, es sieht _abartig_ aus, tippt sich aber relativ fix, und ist einfacher als mit instr zu hantieren (ich kenne das noch: "hmm, muss bei dem MID(... jetzt bei der länge ein -1, ein +1 oder garnix hin..?")
_________________
MFG
Flo

Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.

zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 20.07.2011, 19:09    Titel: Antworten mit Zitat

mag vieleicht einfacher sein, aber meienr meinung nach doch viel zu overblowt für eine einfache instr ersetzung mit etwas chekup.

reg-exp macht auf mich immer den eindruck einer A-Bombe die eien mücke killen soll.
Viel zu leistungsstark für kleine aufgaben.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
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