ERLEDIGT
NEIN
NEIN
ANTWORTEN
12
12
ZUGRIFFE
754
754
EMPFEHLEN
-
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
-
25.12.06 13:07 #2
- 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.
-
kannst du das genauer erklären wie das genau geht?
-
25.12.06 13:54 #4
@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:
So kannst du dann ganz einfach die Zeilen ansprechen und damit arbeiten.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)
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?
-
hab deinen code mal eingefügt. Der spuckt dann als Fehler aus: Compile error Expected array und zeigt auf UBound
-
25.12.06 18:28 #6
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?
-
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 FreddyGeändert von Fr3dd1 (26.12.06 um 11:38 Uhr)
-
26.12.06 12:46 #8
Die Anzahl der Werte eines Arrays ermittelst du mit
(+1 da das Array ja mit 0 zu zählen beginnt). Das hatte ich ja aber auch schon im vorigen Code (Variable AnzahlZeilen).Code vb:1
Anzahl = UBound(Array) + 1
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?
-
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
-
26.12.06 14:41 #10
Nachdem die Kommentare in der Textdate stehen, werden sie auch mit ausgelesen. Das kannst du nicht verhindern, sehrwohl aber, dass sie mit angezeigt werden.
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.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
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?
-
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 THXGeändert von Fr3dd1 (27.12.06 um 11:08 Uhr)
-
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 FreddyGeändert von Fr3dd1 (27.12.06 um 11:59 Uhr)
-
27.12.06 17:56 #13
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
-
scp, nur textdateien
Von PhoenixDH im Forum Linux & UnixAntworten: 2Letzter Beitrag: 14.09.05, 08:15 -
Schreibschutz bei TextDateien
Von Mailyn im Forum Visual Basic 6.0Antworten: 3Letzter Beitrag: 02.09.05, 09:54 -
Textdateien durchsuchen
Von brauch_mehr_schlaf im Forum Microsoft WindowsAntworten: 3Letzter Beitrag: 04.08.05, 02:56 -
Textdateien und C#
Von mordillo im Forum .NET ArchivAntworten: 16Letzter Beitrag: 24.12.04, 04:53 -
Textdateien verändern ?
Von isiprofil im Forum .NET ArchivAntworten: 1Letzter Beitrag: 11.08.04, 13:26





Zitieren

Login





