Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: ---> 4. September: Office-Treffen Rhein-Ruhr <-
Per Makro Zeile in Textdatei ersetzen
zurück: Formel einfügen weiter: Listenfelder verkleinern sich ungewollt Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Offen Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Thomander
Im Profil kannst Du frei den Rang ändern


Verfasst am:
17. Sep 2009, 09:32
Rufname:

Per Makro Zeile in Textdatei ersetzen - Per Makro Zeile in Textdatei ersetzen

Nach oben
       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:

AW: Per Makro Zeile in Textdatei ersetzen - AW: Per Makro Zeile in Textdatei ersetzen

Nach oben
       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:


AW: Per Makro Zeile in Textdatei ersetzen - AW: Per Makro Zeile in Textdatei ersetzen

Nach oben
       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
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
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 
Keine neuen Beiträge Excel Hilfe: Zelle auswählen - Makro starten 10 EstherW 3497 25. Feb 2010, 12:49
Citizen Cane Zelle auswählen - Makro starten
Keine neuen Beiträge Excel VBA (Makros): *M*1 Makro für alle Excel Datein 0 Nexus266 126 03. Dez 2009, 15:20
Nexus266 *M*1 Makro für alle Excel Datein
Keine neuen Beiträge Excel VBA (Makros): Mehrere Makros parallel durch ein Makro aktivieren 2 lofus 495 30. Sep 2009, 11:17
lofus Mehrere Makros parallel durch ein Makro aktivieren
Keine neuen Beiträge Excel VBA (Makros): Mit Makro Verknüpfung aktualisieren 2 johabeda 910 08. Jun 2009, 21:13
johabeda Mit Makro Verknüpfung aktualisieren
Keine neuen Beiträge Excel VBA (Makros): Kalender - Farbe per Makro setzen ??? 2 Gast 652 02. Mai 2009, 20:17
Monty Burns Kalender - Farbe per Makro setzen ???
Keine neuen Beiträge Excel VBA (Makros): Zeile verlassen bei Änderung verhindern 4 hariotfs 222 27. Apr 2009, 14:34
xlDominik Zeile verlassen bei Änderung verhindern
Keine neuen Beiträge Excel VBA (Makros): Zelle markieren makro ausführen 6 Chris86 2142 18. Nov 2008, 18:47
Wilfin Zelle markieren makro ausführen
Keine neuen Beiträge Excel VBA (Makros): Makro funktioniert, aber nicht als Steuerelement 2 firefighter1981 212 13. Mai 2008, 11:18
losgehts Makro funktioniert, aber nicht als Steuerelement
Keine neuen Beiträge Excel Hilfe: kleines Makro, brauche Hilfe 0 christian S 311 21. Nov 2007, 17:48
christian S kleines Makro, brauche Hilfe
Keine neuen Beiträge Excel Hilfe: Wie krige ich den Text des Register per Formel in mein Sheet 2 christoph_001 963 08. Aug 2007, 14:57
Gast Wie krige ich den Text des Register per Formel in mein Sheet
Keine neuen Beiträge Excel VBA (Makros): Platzhalter in Makro? 3 SandraH 442 24. Jul 2007, 14:20
c0bRa Platzhalter in Makro?
Keine neuen Beiträge Excel VBA (Makros): Makro in Symbolleiste ablegen durch VBA Script 3 raRoe 3340 26. Apr 2007, 06:56
raRoe Makro in Symbolleiste ablegen durch VBA Script
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Excel-Formeln für den Rangkorrelationskoeffizienten nach Spearman