# Datei Zugriff & File Ausgabe



## Yoshi90 (6. April 2010)

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 (6. April 2010)

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.


----------



## Yoshi90 (6. April 2010)

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 (6. April 2010)

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


----------



## Yoshi90 (6. April 2010)

Klar, kein Problem.


```
'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 (6. April 2010)

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 (7. April 2010)

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.


----------

