VB6 - Zeilen einer txt-Datei ersetzen

S

s'quare

Hi,
sagen wir ich hab eine textdatei
vb.txt :

Sehr geehrter Herr Schneider
Wir möchten Ihnen....

end vb.txt

Kann ich irgendwie den String "Sehr geehrter Herr " suchen und dann einen String(z.B: Meier) an der Stelle einfügen, aber auch den alten Namen(Schneider) löschen???

Vielleicht jeden geänderten Namen in eine ini.Datei speichern und jedes Mal nach dem zuletz geänderten String aus der ini-datei suchen, aber wie??

Schonmal Danke
 
klaroo

Hi, klar geht dass, hoffe nur das ich das jetzt "verständlich" zu erklären hinbekomme... wenn nicht kann ich dir mal einen source schicken :p

also,... gehen wir mal davon aus du hast die gesamt txt datei in einem array eingelesen:

Dim ZeilenText (1000) as string ' max 1000 Zeilen einlesen
open "vb.txt" for input as #1
zeilenindex = 0
while not eof(1)
zeilenindex=zeilenindex+1
input #1,ZeilenText [zeilenindex ]
maxZeilen = zeilenindex ' Speichern der kompletten Zeilenanzahl der Datei
wend

So, jetzt erstellen wir eine prozedur, die 2 Parameter übergeben bekommt, als erstes den Suchstring, und als 2tes dden String der dann für den ersten ersetzt wird. sieht allgemein so aus

Public Sub Ersetzen ( SuchString as string, NewString as string )
End Sub

jetzt muss nur noch der code rein:


Public Sub Ersetzen ( Suchstring as string, Newstring as string )
For I = 1 To maxZeilen
' Wenn ein Vergleich TRUE ist, d.H. in einer Zeile das gesuchte Wort wie Meier gefunden worden ist
If InStr(ZeilenText(I), Suchstring) <> 0 Then
' Ersetzungsfunktion durch den Newstring
ZeilenText(I) = Left(ZeilenText(I), InStr(ZeilenText(I), SuchString) - 1) & NewString & Right(ZeilenText(I), Len(ZeilenText(I)) - InStr(ZeilenText(I), Suchstring) - Len(Suchstring) + 1)
End If
Next

' Anschliessend Datei wieder speichern

Open "vb.txt" For Output As #1
For I = 1 To maxZeilen
' Wieder auf Platte schreiben
Print #1, ZeilenText(I)
Next
Close #1
End Sub


Dannach Meier durch Schneider ersetzen durch folgenden Aufruf:

>> Call Ersetzen "Meier","Schneider"

Die blaue Zeile ist dabei der eigetnlich veränderungsalgorithmus,... wenn man erst mal durch gestiegen ist, ists auch leichter zu verstehen, schau diesebezüglich mal in der VbHilfe nach folgenden Befehlen --> instr() , mid , left, right .. Mit diesen Bekommst du Ersetzen und so (auch Einfügen) hin.

Aber obiges Beispiel sollte funzen, obs dies tut weiss ich jetzt net so, habs eben getippt,aber nicht ausprobiert,also pure theorie :) .. kannst mir bescheit sagen, oder wenn du noch fragen hast :p

grüsse ciao disco
 
Nochmal ich

Erstmal riesen Dank. Hab deinen Code auch verstanden, nur hab ich mich nicht so ganz klar ausgedrückt. nehmen wir mal an, ich will eine Zeile der textdatei durch eine andere, neue ersetzen. und dies ist immer die zeile 18 (z.B.):

COLORSET_COLOR 70 40 50 # COLOR_PLAYER
/\ /\
|| ||
Hier sind aber immer TAbs eingebaut, funzt das auch, wenn ich einfach tabs in einen srting einbaue:

strZeile = " (tab)"

und nochwas ich hab nur VB-Working Model (keine EXE-Dateien und keine Hilfe *sch...e*)

Aber trotzdem danke für deine hilfe

MfG
 
das mit den tabs hab ich noch nicht getestet, aber sollte auch funzen... ich würde dann aber beim einlesen einer datei NICHT "input #1,Var$" machen, sondern "LINE INPUT #1,Var$" ... line input liest auch tabs und son kram mit ein ... (siehe vb-hilfe) ...

mmh.. naja.. schade dass meine mama mir verboten hat auf
astalavista.com zu gehen und mir die vollversion runtzuladen... zum wohle der exe dateien ;)

aber ich werde sie demnächst mal überreden :)

bis dann ciao
 
Anwort auf deine Private Message

also, hab ich das jetzt richtig verstanden dass du z.b. NUR die 18 Zeile einlesen willst?!!

Wenn ja, dann schreibe folgende Function
(Sie gibt den Text der gewünschten Zeile aus)

------------------
public function Text_Von_Zeile ( ZeilenNr as integer ) as string
' Als erstes Variablen setzen
dim zaehler as integer:zaehler=0
dim maxzeilen as integer
dim dateiname as string: dateiname="vb.txt" ' <-- deine datei
dim Text (1000) as string ' Array Text, max 1000 Zeilen hier

' Erstmal alles einlesen, aber nur intern speichern (in array)
open dateiname for input as #1 'Datei öffnen
while not eof(1) ' Schleife, alles einlesen
zaehler=zaehler+1 ' Dieser Zähler erhöht sich bei jeder Zeile um 1
LINE INPUT #1 , Text ( zaehler ) ' Hier Zeile einlesen mit Tabs und so
maxzeilen = zaehler
wend
close #1 ' File schliessen

' Jetzt rückgabe der gesuchten Zeile
Text_Von_Zeile = Text ( ZeilenNr )
end function
------------------------
diese function ist variabel gehalten,... um nun die Zeile 18 z.b. in einer Textbox erscheinen zu lassen, wenn man auf den button Command1 klickt, schreibst du folgendes bei der Comman1_Click Sub

---------
Text1.text = Text_Von_Zeile ( 18 )
---------

und so weiter und so fort... war es das was du gemeint hast?

grüsse ciao;)
 
ich vergass...

.... noch ein hinweiss, fällt mir grad ein:
du kannst die oben erwähnten sachen ja dann auch kombinieren...du hast ja jetzt eine "allgemeine ersetzungsfunktion" und eine "allgemeine text von ner zeilen bestimmungsfunktion" ...

also um generell den text der zeile 18 zu ersetzen kannste ja, in bezug auf "oben" folgendes schreiben

private sub Command1_Click ()

Call Ersetze Text_Von_Zeile(18),"Neuer Text"

end sub


....greets
 
Ich hab aber die Funktion Ersetzen nicht verstanden.

Halt jetzt! Aber...
 
...die Tabs würde ich doch gerne haben. Aber er nimmt den Tab-Abstand als Leerzeichen (total verflixt). Gibts da irgendwie ein ASCII Code für den Tab???

MfG
 
logitsch,..

asci wert für einen Tab ist "9" ... -> >print chr(9)< schreibt z.B. einen tab in eine form,..wirst halt nicht viel sehen :) ..aber kannste ja mal in einer textbox probieren...

das gegenstück zum tab ist backspace, Ascii code 8 glaube ich..

grüsse ciao
 
Zurück