tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
12
ZUGRIFFE
754
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Fr3dd1 Fr3dd1 ist offline Mitglied Silber
    Registriert seit
    Jun 2006
    Beiträge
    66
    Hallo,

    zu meiner Frage habe ich bei der Suche nichts gefunden.
    Ich hab 2 Probleme.

    1. Ich möchte in einer Textdatei in eine bestimmte Zeile springen, und von dort aus sollen die nächsten 7 Zeilen ausgelesen werden und in bestimmten Variablen gespeichert werden.

    Bsp.

    Andre
    Wohnort
    Geburtsort
    ...

    2. Ich möchte Jede Zeile aus einer textdatei auslesen. Ich weis nicht wie viele Zeilen die textdatei hat. Jede Zeile soll einen Wert zugeordnet bekommen. Die erste Zeile 1 die zweite Zeile 2 usw. Damit ich die einzelnen Zeilen über die Nummerirung auswählen kann.

    Wenn mir wer helfen könnte, wäre nett!

    mfg Freddy
     

  2. #2
    maniacquaker maniacquaker ist offline Mitglied
    Registriert seit
    Nov 2006
    Beiträge
    19
    guck mal nach den dateioperationen (fopen,fread,fgets...).

    damit kannst du dann die datei in einen string einlesen. ein zeilenende ist glaube ich
    ein '\n'. die siebte zeile wäre also wenn man 6 mal auf ein '\n' gestoßen ist.
    (es gibt aber auch funktionen, die jeweils nur eine zeile einlesen)

    wenn du die zahlen nummer nummerieren willst dann tu das doch einmal mit einem 2-dimensionalen array. zb. char zeilen[129][129] .

    dann fängst du erst an bei zeile[1] hineinzuschreiben, dann hast du deine nummerierung.

    so funktioniert das natürlich nur, wenn du weisst, dass du niemals 2000 zeilen bearbeiten musst. in diesem fall schau mal nach verketteten listen.

    bin zwar kein sehr guter programmierer aber so sollte es zu realisieren sein.
     

  3. #3
    Fr3dd1 Fr3dd1 ist offline Mitglied Silber
    Registriert seit
    Jun 2006
    Beiträge
    66
    kannst du das genauer erklären wie das genau geht?
     

  4. #4
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    @maniacquaker: Wir sind im VB-Forum, dein Rat scheint eher in Richtung PHP zu gehen.

    @Fr3dd1: Lies die ganze Textdatei ein und splitte sie. Dann kannst du im Array jede Zeile auswählen:
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    Dim fFile As Integer, fInhalt As String, vZeilen As String, DateiName As String
    fFile = FreeFile
    DateiName = "C:\Test.txt" 'hier dein Name inkl. Pfad
    fInhalt = Space(FileLen(DateiName)) 'Variable in der richtigen Länge vorfüllen
    Open DateiName For Binary As fFile
     Get fFile, , fInhalt 'komplette Datei einlesen
    Close fFile
    vZeilen = Split(fInhalt, vbNewLine) 'den Text in Zeilen teilen
    'vZeilen ist ein Array, dass sämtliche Zeilen enthält. Die Größe ist
    AnzahlZeilen = UBound(vZeilen) + 1
    'da das Array bei 0 beginnt hat die erste Zeile den Index 0
    ErsteZeile = vZeilen(0)
    So kannst du dann ganz einfach die Zeilen ansprechen und damit arbeiten.


    Der Doc!
     
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

  5. #5
    Fr3dd1 Fr3dd1 ist offline Mitglied Silber
    Registriert seit
    Jun 2006
    Beiträge
    66
    hab deinen code mal eingefügt. Der spuckt dann als Fehler aus: Compile error Expected array und zeigt auf UBound
     

  6. #6
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    Ups, Fehler in der Deklaration, Zeile sollte so lauten:
    Code vb:
    1
    
    Dim fFile As Integer, fInhalt As String, vZeilen() As String, DateiName As String

    Ist alles aus dem Kopf und ohne Überprüfung, daher können sich schon mal Fehler einschleichen. Sollte aber so funktionieren.


    Der Doc!
     
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

  7. #7
    Fr3dd1 Fr3dd1 ist offline Mitglied Silber
    Registriert seit
    Jun 2006
    Beiträge
    66
    Danke so funktioniert das nun erst einmal. Kann man denn auch die Zeilen in die die textdatei gesplitet worden ist zählen?

    Und dann noch eine Frage, kann ich in eine Zeile mehrere Werte schreiben die dann vom Programm getrennt werde?

    Bsp.:
    Name; Wohnort; Straße

    Wie kann ich die einzelnen Wörter abfragen?
    mfg Freddy
    Geändert von Fr3dd1 (26.12.06 um 11:38 Uhr)
     

  8. #8
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    Die Anzahl der Werte eines Arrays ermittelst du mit
    Code vb:
    1
    
    Anzahl = UBound(Array) + 1
    (+1 da das Array ja mit 0 zu zählen beginnt). Das hatte ich ja aber auch schon im vorigen Code (Variable AnzahlZeilen).

    Wenn du einen einzelnen String so trennen willst, benutz wie im großen Beispiel die Funktion Split(). In deinem Fall wäre das Trennzeichen halt z.B. der Strichpunkt, könnte so aussehen:
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    
    Text = "Name; Wohnort; Straße"
    Textteile = Split(Text, ";")
    'Jetzt würde dein Array folgend aussehen:
    'Textteile(0) = "Name"
    'Textteile(1) = " Wohnort"
    'Textteile(2) = " Straße"
    'Beachte die führenden Leerzeichen bei Wohnort und Straße, mit LTrim() kannst du die entfernen


    Der Doc!
     
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

  9. #9
    Fr3dd1 Fr3dd1 ist offline Mitglied Silber
    Registriert seit
    Jun 2006
    Beiträge
    66
    so ich hab das jetztb einigermaßen hinbekommen. Ich hab nur noch eine Frage. Ich hab eine Textdatei wo ich die ganzen werte Rauslese. Jetzt wollte ich da Kommentare beischreiben. Kann ich das machen ohne das die ausgelesen werden?

    mfg Freddy
     

  10. #10
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    Nachdem die Kommentare in der Textdate stehen, werden sie auch mit ausgelesen. Das kannst du nicht verhindern, sehrwohl aber, dass sie mit angezeigt werden.
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    'Zusätzlich eine Variable dimensionieren:
    Dim vKommentar() As String
    'Annahme: Du hast jetzt schon die Testdatei ausgelesen und die Zeilen stehen in vZeilen()
    'Als Trennzeichen kannst du z.b. "///" (drei Slashes) nehmen
     
    Anzahl = UBound(vZeilen())
    ReDim vKommentar(Anzahl)
    For cnt = 0 To Anzahl
     cPos = InStr(vZeilen(cnt), "///")
     If cPos > 0 Then
      vKommentar(cnt) = Right(vZeilen(cnt), Len(vZeilen(cnt) - cPos + 1) '+1 damit er auch das erste Trennzeichen mitnimmt. Ansonsten ersetz es durch -2
      vZeilen(cnt) = Left(vZeilen(cnt), cPos - 1)
     End If
    Next cnt
    Jetzt würde der reine Text im Array vZeilen, der Kommentar (inkl. der Trennzeichen) in vKommentar stehen. Wenn du das ganze speichern willst, musst dur nur erst die beiden Arrays wieder Zeile für Zeile verbinden.


    Der Doc!
     
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

  11. #11
    Fr3dd1 Fr3dd1 ist offline Mitglied Silber
    Registriert seit
    Jun 2006
    Beiträge
    66
    ok danke, nun hab ich ersteinmal alles was ich brauche. Wenn ich noch fragen haben sollte, frag ich hier nochmal nach.

    EDIT: Also ich hab da noch ein Problem. Ich hab das soweit alles hinbekommen. Ich splite einen text erst in Zeilen, und dann die zeile die ich brauche in Wörter und nehme mir dann das raus was ich brauche. Nun hab ich aber das problem das eine die Informnationen aus einer Zeile irgendwie nicht ausgelesen werden. Ich hab den Code einmal geschrieben und dann kopiert. Bei allen anderen Zeilen funktioniert dieser code. Nur die besagte Zeile tauscht nirgendwo auf. Ich guck da noch mal drüber obn ich was in der Syntax falsch gemacht abe, aber das kann eig nicht. Wenn ich nicht weiterkomme poste ich den Code mal.

    mfg Freddy
    big THX
    Geändert von Fr3dd1 (27.12.06 um 11:08 Uhr)
     

  12. #12
    Fr3dd1 Fr3dd1 ist offline Mitglied Silber
    Registriert seit
    Jun 2006
    Beiträge
    66
    So jetzt hab ich ein Problem. Ich bestimme über eine Variable (Lis) welche zeile angepeilt werden soll. Vorher splite ich die TXT Datei in Zeilen. Die Zeile die ich dann ausgewählt habe, splite ich dann ein zweites mal, in Wörter. Nun hab ich das Problem das der bei 2 Punkten nicht die Zeile nimmt die ich will sondern die erste zeile. Was kann ich falsch gemacht haben? <---- Hat sich erledigt, ich hatte eine Leerstelle bei der if anweisung zuviel...

    Und dann wollte ich noch wissen wie man eine Textdatei, jeweils das erste Wort einer zeile, nach einem Wort durchsuchen kann? Ich möchte dann den Wert nach dem Wort, eine Zahl, in einer Variable speichern und damit weiterarbeiten.

    mfg Freddy
    Geändert von Fr3dd1 (27.12.06 um 11:59 Uhr)
     

  13. #13
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    Am besten, du liest die Datei ganz ein, splittest sie aber nicht. Dann durchsuchst du die ganze Datei mittels InStr() nach deinem Schlüsselwort mit einem vorhergesetzten Zeilenwechsel (siehe den ua Code). Dann einfach den dem Zeichen suchen, das hinter der Zahl stehn (Leerzeichen, Zeilenwechsel, ...) und schon hast du die Zahl. Ein kleiner Beispielcode:
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
     Dim fFile%, vInhalt$, vStelle%, vTStelle%, vZahl&
     fFile = FreeFile
     vInhalt = Space(FileLen("C:\test.txt"))
     Open "C:\test.txt" For Binary As fFile
      Get fFile, , vInhalt
     Close fFile
      vStelle = InStr(vInhalt, vbNewLine & "Wort") 'Suche nach dem Wort mit einem vorangestellten Zeilenumbruch (erste Zeile muss separat durchsucht werden)
      If vStelle > 0 Then 'Wenn ja
       vTStelle = vStelle + 6 'Erste Stelle nach dem Wort festlegen (Länge Wort + 2 Zeichen Zeilenumbruch; ev noch das Trennzeichen beachten
       vStelle = InStr(vTStelle, vInhalt, vbNewLine) 'Zeichen nach der Zahl suchen (hier Zeilenumbruch)
       vZahl = clng(val(Mid(vInhalt, vTStelle, vStelle - vTStelle))) 'und die Zahl isolieren
      End If
      MsgBox vZahl 'Ich geb sie hier einfach mal per MessageBox aus

    Code ist nur Anschauung, du musst ihn natürlich für deine Datei anpassen.


    Der Doc!
     
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

Ähnliche Themen

  1. scp, nur textdateien
    Von PhoenixDH im Forum Linux & Unix
    Antworten: 2
    Letzter Beitrag: 14.09.05, 08:15
  2. Schreibschutz bei TextDateien
    Von Mailyn im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 02.09.05, 09:54
  3. Textdateien durchsuchen
    Von brauch_mehr_schlaf im Forum Microsoft Windows
    Antworten: 3
    Letzter Beitrag: 04.08.05, 02:56
  4. Textdateien und C#
    Von mordillo im Forum .NET Archiv
    Antworten: 16
    Letzter Beitrag: 24.12.04, 04:53
  5. Textdateien verändern ?
    Von isiprofil im Forum .NET Archiv
    Antworten: 1
    Letzter Beitrag: 11.08.04, 13:26