|
Per Makro Zeile in Textdatei ersetzen
|
| Autor |
Nachricht |
Thomander
Im Profil kannst Du frei den Rang ändern
Verfasst am: 17. Sep 2009, 09:32 Rufname:
|
|
| Version: Office 2003 |
|
Hallo,
ich habe ein Makro, welches per Kommandozeile ein Programm startet, das wiederum als Parameter eine Textdatei hat. Die Textdatei muss an zwei Stellen jeweils angepasst werden, da das ganze in einer Schleife läuft.
Die Textdatei sieht in etwa so aus:
| Code: | option batch on
option confirm off
open user:password@example.com
cd /0fff/4aa11799103a2e29e10080009ee2877f
option transfer binary
get 4aa11799103a2e29e10080009ee2877f.prop d:\3\
close
exit
|
Nun sollen jeweils die Zeilen 4 und 6 (Verzeichniswechsel und get) geändert werden. Ich habe schon einige Vorschläge gesehen, aber da werden immer neue Dateien angelegt. Da die Schleife aber ziemlich oft durchläuft, hätte ich lieber eine Möglichkeit, die Textdatei zu ändern, ohne viele neue Dateien anlegen zu müssen...
Ist so etwas möglich?
Danke im Voraus,
Thomander
|
|
Elvis_the_King
Im Profil kannst Du frei den Rang ändern

Verfasst am: 17. Sep 2009, 11:14 Rufname:
|
|
| Version: Office 2003 |
|
Hi,
bei der Verarbeitung von Textdateien bist Du leider auf drei Zugriffsmodi eingeschränkt:
1.) ForReading (lesender Zugriff)
2.) ForWriting (schreibender Zugriff, der den kompletten Inhalt der Datei mit dem übergebenen String ersetzt)
3.) ForAppending (schreibender Zugriff, der den kompletten Inhalt der Datei beibehält und den übergebenen String am Dateiende anhängt)
Die Bordmittel erlauben es also nicht, gezielt eine Zeile in der Mitte der Datei zu ersetzen.
Workaround:
Inhalt der kompletten Datei in ein Array einlesen, Zeile innerhalb des Arrays aktualisieren, Inhalt des aktualisierten Arrays in eine Stringvariable zurückschreiben und den Inhalt der Stringvariablen per ForWriting zurück in die Textdatei schreiben. Etwa so:
| Code: | Public Sub ReplaceLineInTextFile(ByVal strFilename As String, _
ByVal lngLine As Long, _
ByVal strNew As String)
Const clngForReading As Long = 1
Const clngForWriting As Long = 2
Dim fso As Object
Dim fsoFile As Object
Dim fsoTs As Object
Dim arr() As String
Dim strTmp As String
Dim i As Long
On Error GoTo ErrHandler
' Textfile in Array auslesen:
Set fso = CreateObject("Scripting.FileSystemObject")
Set fsoFile = fso.GetFile(strFilename)
Set fsoTs = fsoFile.OpenAsTextStream(clngForReading)
arr = Split(fsoTs.ReadAll, vbCrLf)
fsoTs.Close
' Zeile in Array ersetzen:
arr(lngLine - 1) = strNew
' Array in Textvariable schreiben:
For i = LBound(arr) To UBound(arr)
If strTmp <> "" Then strTmp = strTmp & vbCrLf
strTmp = strTmp & arr(i)
Next i
' Kompletttext der Datei mit Inhalt der Textvariablen ersetzen:
Set fsoTs = fsoFile.OpenAsTextStream(clngForWriting)
fsoTs.Write strTmp
fsoTs.Close
ErrExit:
On Error Resume Next
Set fsoTs = Nothing
Set fsoFile = Nothing
Set fso = Nothing
Exit Sub
ErrHandler:
MsgBox Err.Description, vbCritical, "WriteToTextFile: Fehler " & Err.Number & " aufgetreten!"
Resume ErrExit
End Sub |
Übergabeparameter:
strFilename = Name der Textdatei
lngLine = Nummer der zu ersetzenden Zeile
strNew = Neuer Text der zu ersetzenden Zeile
HTH,
Eric
|
|
Thomander
Im Profil kannst Du frei den Rang ändern
Verfasst am: 17. Sep 2009, 11:30 Rufname:
|
| |
| Version: Office 2003 |
|
Wow, danke. Habe mittlerweile auch etwas herumgespielt und habe mir ein VBScript geschrieben, das genau das macht. Aber so ist das natürlich einfacher, dann kann ich das direkt in VBA machen.
Hier aber noch mein VBScript, das ich angepasst habe von diesem hier http://www.benutzer.de/index.php?content=100029#
Vielleicht interessiert es ja jemanden...
| Code: | 'Für Dateizugriff benötigtes Objekt erzeugen
Set fso=CreateObject("Scripting.FileSystemObject")
'Ersten Aufrufparameter (=Dateiname) einlesen
A=WScript.Arguments(0)
'Zweiten Parameter (=Neue Zeile 4) einlesen
B=WScript.Arguments(1)
'Dritten Parameter (=neue Zeile 6) einlsen
C=WScript.Arguments(2)
' Textdatei in Array einlesen (Zeilen als Element)
T=Split(fso.OpenTextFile(A).ReadAll, vbCrLf)
'Ausgabe in Datei vorbereiten (vorhandene Datei überschreiben)
Set O=fso.CreateTextFile(A,True)
O.WriteLine T(0)
O.WriteLine T(1)
O.WriteLine T(2)
O.WriteLine B
O.WriteLine T(4)
O.WriteLine C
O.WriteLine T(6)
O.Write T(7)
'Datei schliessen
O.Close
|
Vielen Dank für Deine Hilfe!!!
cu
Thomander
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum herunterladen
|
|
|
|
| Verwandte Themen |
| Forum / Themen |
Antworten |
Autor |
Aufrufe |
Letzter Beitrag |
 |
Excel Hilfe: Zelle auswählen - Makro starten |
10 |
EstherW |
3497 |
25. Feb 2010, 12:49 Citizen Cane  |
 |
Excel VBA (Makros): *M*1 Makro für alle Excel Datein |
0 |
Nexus266 |
126 |
03. Dez 2009, 15:20 Nexus266  |
 |
Excel VBA (Makros): Mehrere Makros parallel durch ein Makro aktivieren |
2 |
lofus |
495 |
30. Sep 2009, 11:17 lofus  |
 |
Excel VBA (Makros): Mit Makro Verknüpfung aktualisieren |
2 |
johabeda |
910 |
08. Jun 2009, 21:13 johabeda  |
 |
Excel VBA (Makros): Kalender - Farbe per Makro setzen ??? |
2 |
Gast |
652 |
02. Mai 2009, 20:17 Monty Burns  |
 |
Excel VBA (Makros): Zeile verlassen bei Änderung verhindern |
4 |
hariotfs |
222 |
27. Apr 2009, 14:34 xlDominik  |
 |
Excel VBA (Makros): Zelle markieren makro ausführen |
6 |
Chris86 |
2142 |
18. Nov 2008, 18:47 Wilfin  |
 |
Excel VBA (Makros): Makro funktioniert, aber nicht als Steuerelement |
2 |
firefighter1981 |
212 |
13. Mai 2008, 11:18 losgehts  |
 |
Excel Hilfe: kleines Makro, brauche Hilfe |
0 |
christian S |
311 |
21. Nov 2007, 17:48 christian S  |
 |
Excel Hilfe: Wie krige ich den Text des Register per Formel in mein Sheet |
2 |
christoph_001 |
963 |
08. Aug 2007, 14:57 Gast  |
 |
Excel VBA (Makros): Platzhalter in Makro? |
3 |
SandraH |
442 |
24. Jul 2007, 14:20 c0bRa  |
 |
Excel VBA (Makros): Makro in Symbolleiste ablegen durch VBA Script |
3 |
raRoe |
3340 |
26. Apr 2007, 06:56 raRoe  |
| |
|