# VB6 - Zeilen einer txt-Datei ersetzen



## s'quare (1. Juli 2001)

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


----------



## discoguide24.de (1. Juli 2001)

*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  

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  

grüsse ciao disco


----------



## s'quare (1. Juli 2001)

*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


----------



## discoguide24.de (1. Juli 2001)

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


----------



## discoguide24.de (1. Juli 2001)

*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


----------



## discoguide24.de (1. Juli 2001)

*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


----------



## s'quare (2. Juli 2001)

Ich hab aber die Funktion Ersetzen nicht verstanden.

Halt jetzt! Aber...


----------



## s'quare (2. Juli 2001)

...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


----------



## discoguide24.de (2. Juli 2001)

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


----------

