Datei Zugriff & File Ausgabe


Y

Yoshi90

Guten Tag,

ich hoffe in diesem Forum kann mir weiter geholfen werden.
Zu Anfang muss ich direkt sagen, dass ich ein Anfänger bin was das programmieren angeht.

-> Situationsbeschreibung
--> Problematik

### Situationsbeschreibung ###

Es besteht eine .txt Datei (welche Data.txt in meinem Script genannt wurde(SourceFile)), diese enthält zwei Dateinamen z.B. test1.txt & test2.txt.
Auf diese beiden Datein soll ein Zugriff gestartet werden, und geprüft werden ob das zuvor eingegebene Suchwort bzw Buchstabe enthalten ist.
Sofern dies zutrifft, soll das Programm in der alten Datei das Suchwort bzw. den Buchstaben durch den zuvor eingegebenen Alternativ Text ersetzt werden.
Das Ziel ist es dann eine _result.txt Datei zu erstellen in der die veränderten Werte sowie die alten Werte enthalten sind.

Bsp: Suchwort: Hallo Alternativ Text: Spaß
test1.txt --> hallo test2.txt --> blablabla
blablahallobla hallo
halluuuu bla


Data_result.txt --> test1.txt
Spaß
blablaSpaßbla
halluuu

--> test2.txt
blablabla
Spaß
bla

Ich hoffe die Situationsbeschreibung war einigermaßen verständlich, sollten dennoch Fragen dies bezüglich auftreten werde ich natürlich versuchen es anders zu erläutern :)


### Problematik ###

Die Problematik besteht darin, die alten Files zu verändern und in EINER (_result.txt) datei wieder auszugeben.




Ich danke vielmals für die Hilfe.
Wünsche einen angenehmen Start in die neue Woche.



---------------------------------------------------------------------------------------------
'On error resume next


Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0

Dim FileSystem, File, TS
Dim Sourcefile

SourceFile = "h:\Data.txt"

StringOld = Inputbox ("Welcher Text wird gesucht?")
StringNew = Inputbox ("Bitte den Alternativ-Text eingeben")


Set FileSystem = CreateObject("Scripting.FileSystemObject")
Set File = FileSystem.GetFile(SourceFile)
Set TS = File.OpenAsTextStream(ForReading, TristateUseDefault)


Do While TS.AtEndOfStream <> True
StrLine = TS.ReadLine
wscript.echo "Datei --> " & Strline


'Neues File schreiben & Name modulieren
Intposition = inStr(1,Strline,".",1)
BintPosition = inStr(5,Strline,8,1)
wscript.echo Len(Strline)
wscript.echo Intposition
pre = Left(Strline, Intposition-1)
Post = Right(Strline, Intposition-2)
StrDest = pre & "_Result" & post
wscript.echo StrDest


'SET NewStream = Filesystem.CreateTextFile (StrDest)
Set NewStream = Filesystem.CreateTextFile (StrDest,2,True)


IF Err.Number <> 0 THEN errBreak

'Erstellen eines TextStream womit in die Datei geschrieben werden kann
'Set fsodest= Filesystem.CreateTextFile("H:\" & StrDest,True,False)

'File öffnen
Set File = FileSystem.GetFile(StrLine)
Set Datei = File.OpenAsTextStream(ForReading, TristateUseDefault)

Do While Datei.AtEndOfStream <> True
StrDateiLine = Datei.ReadLine
Ausgabe = Ausgabe & StrDateiline & vbcrlf

'Zeile prüfen
Vergleich = instr(1, StrDateiline, StringOld,1)

if Vergleich > 0 Then
NewStream.WriteLine StringNew
Treffer = Treffer + 1
else
end if



Ausgabe = ""


Loop





Ausgabe = ""



'Wenn zutreffend dann File ändern



'Änderung in neuem File wegschreiben

Datei.Close
WScript.Echo "Anzahl der Treffer des Wortes " & "-" & StringOld & "-" & " : " & Treffer
Treffer = 0
Loop

TS.Close
---------------------------------------------------------------------------------------------
 

dignsag

Erfahrenes Mitglied
Hallo Yoshi90,

nette Situationsbeschreibung, das nenn ich mal Struktur.

Du hast Code gepostet, was ist damit? Funktioniert nicht? Fehler?

Für Visual Basic informier dich zu der Thematik am Besten mal über die Befehle:

Open File
Print
Print Line
Input

Das sind die Funktionen die ich normalerweise in VBA für dieses Problem verwende.

Du kannst auch konkrete Fragen dazu hier stellen. Dein Code sieht mir sehr stark nach .NET aus, da läuft das zwecks strikter Objektorientierung natürlich etwas anders ab.
 
Y

Yoshi90

Guten Tag dignsag,

hab schon mal vielen herzlichen Dank für deine schnelle Antwort.
Werde mich nun mal über die von dir genannten Befehle schlau machen.

Den Code habe ich gepostet, damit ihr / du eine evtl. eine bessere Vorstellung habt.
Habe versucht die Situation so leicht wie möglich zu beschreiben.

Um nochmal auf den Code zurück zu kommen, der funktioniert soweit.
Jedoch wie ich in der Problematik beschrieben habe fehlt mir nun das logische Denkvermögen:)
Momentan werden 2 _result.txt erstellt, daraus müsste ich eine machen und in dem alten File die Ersetzungen vornehmen.

------------------------------

*Input über die Befehle in mein Brain hol*

Mit freundlichen Grüßen
 

Yaslaw

n/a
Moderator
Kannst du bitte dein Code formatiert in [code=vb]mein Code[/code] posten, so dass man das Ding auch lesen kann?
 

Yoshi90

Grünschnabel
Klar, kein Problem.

Visual Basic:
'On error resume next


Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0

Dim FileSystem, File, TS
Dim Sourcefile

SourceFile = "h:\Data.txt"

StringOld = Inputbox ("Welcher Text wird gesucht?")
StringNew = Inputbox ("Bitte den Alternativ-Text eingeben")


Set FileSystem = CreateObject("Scripting.FileSystemObject")
Set File = FileSystem.GetFile(SourceFile)
Set TS = File.OpenAsTextStream(ForReading, TristateUseDefault)


Do While TS.AtEndOfStream <> True
StrLine = TS.ReadLine
wscript.echo "Datei --> " & Strline


'Neues File schreiben & Name modulieren
Intposition = inStr(1,Strline,".",1)
BintPosition = inStr(5,Strline,8,1)
wscript.echo Len(Strline)
wscript.echo Intposition
pre = Left(Strline, Intposition-1)
Post = Right(Strline, Intposition-2)
StrDest = pre & "_Result" & post
wscript.echo StrDest


'SET NewStream = Filesystem.CreateTextFile (StrDest)
Set NewStream = Filesystem.CreateTextFile (StrDest,2,True)


IF Err.Number <> 0 THEN errBreak

'Erstellen eines TextStream womit in die Datei geschrieben werden kann
'Set fsodest= Filesystem.CreateTextFile("H:\" & StrDest,True,False)

'File öffnen
Set File = FileSystem.GetFile(StrLine)
Set Datei = File.OpenAsTextStream(ForReading, TristateUseDefault)

Do While Datei.AtEndOfStream <> True
StrDateiLine = Datei.ReadLine
Ausgabe = Ausgabe & StrDateiline & vbcrlf

'Zeile prüfen
Vergleich = instr(1, StrDateiline, StringOld,1)

if Vergleich > 0 Then
NewStream.WriteLine StringNew
Treffer = Treffer + 1
else
end if



Ausgabe = ""


Loop





Ausgabe = ""



'Wenn zutreffend dann File ändern



'Änderung in neuem File wegschreiben

Datei.Close
WScript.Echo "Anzahl der Treffer des Wortes " & "-" & StringOld & "-" & " : " & Treffer
Treffer = 0
Loop

TS.Close
 

dignsag

Erfahrenes Mitglied
Also:

1. Du öffnest die Erste Datei.
2. Du öffnest die result-Datei.
3. Du nimmst die erste Zeile und prüfst auf dein Suchwort und ersetzt es durch dein Alternativwort.
4. Du schreibst die erste Zeile in deine result-Datei.
5. Du nimmst die zweite Zeile und prüfst auf dein Suchwort und ersetzt es durch dein Alternativwort
6. usw.
7. Die erste Datei ist durch. Du schließt die erste Datei
8. Du öffnest die zweite Datei.
9. Du behältst die result-Datei offen.
10. Du nimmst die erste Zeile und prüfst auf dein Suchwort und ersetzt es durch dein Alternativwort
11. Du schreibst die erste Zeile in deine result-Datei.
12. usw.
13. Du schließt deine result-Datei.

Das ist so im groben die Logik. Für das suchen und ersetzen verwendest du meiner Ansicht nach schon genau die richtigen Befehle.
 

Yoshi90

Grünschnabel
Danke dir für die Gliederung.
Werde mich mal weiter dran geben dahinter zu steigen und es zu verstehen *grins*
Sollten sich im Laufe meiner "Weiterbildung" fortschritte getan haben werde ich mich natürlich melden.
Denke jedoch das weitere Fragen aufkommen werden:)

Ich danke dir jetzt schon mal sehr für deine Hilfe.
 

Neue Beiträge