In Textdateien Springen

Fr3dd1

Mitglied
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
 
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.
 
@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:
Visual Basic:
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!
 
Ups, Fehler in der Deklaration, Zeile sollte so lauten:
Visual Basic:
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!
 
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
 
Zuletzt bearbeitet:
Die Anzahl der Werte eines Arrays ermittelst du mit
Visual Basic:
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:
Visual Basic:
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!
 
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
 
Nachdem die Kommentare in der Textdate stehen, werden sie auch mit ausgelesen. Das kannst du nicht verhindern, sehrwohl aber, dass sie mit angezeigt werden.
Visual Basic:
'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!
 
Zurück