Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1372to1376
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datei Bearbeiten

Datei Bearbeiten
31.07.2014 22:17:33
Pete
Hey Leute,
ich stehe vor einem kleinen Problem. Und zwar möchte ich über ein Makro eine Datei öffnen (Text Inhalt) und in bestimmten Zeilen an bestimmten Stellen Inhalt ändern. Ich habe den allgemeinen Ansatz um eine Datei zu öffnen und Inhalt anzuhängen, aber wie kann ich die Zeile und die Stelle beeinflussen?
Hier mein Ansatz:
Sub editFile()
Dim strPath As String
Dim intFile As Integer
strPath = "D:\excel\datei.py"
intFile = FreeFile
Open strPath For Append As #intFile
Write #intFile, "Hello World"
Close #intFile
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datei Bearbeiten
01.08.2014 06:37:13
Oberschlumpf
Hi Pete
Dein Ansatz öffnet nur eine Datei, um zusätzliche Einträge anzuhängen; ändern kannst du mit dem Code in der Datei nix.
Du musst die bestehende Datei erst mal öffnen und sie zeilenweise einlesen.
Direkt im nächsten Schritt öffnest du eine "Dummy"-Datei, die alle alten + neuen Zeilen aufnimmt.
Dann musst du direkt nach dem Einlesen einer Zeile prüfen, ob diese Zeile den Inhalt enthält, den du ändern willst.
Wenn ändern = nein, dann die alte Zeile in die dummy-datei schreiben.
Wenn ändern = ja, dann Textstelle in Zeile ändern, dann neue Zeile in dummy-datei schreiben.
Wenn alles fertig, dann alte Originaldatei löschen, dummy-Datei in Namen der Originaldatei umbenennen.
Das könnte so aussehen (ungetestet)

Sub AltNeu()
Dim lstrZeile As String
Open "D:\excel\datei.py" For Input As #1
Open "D:\excel\dummy.txt" For Output As #1
Do While Not EOF(1)
Line Input #1, lstrZeile
If InStr(lstrZeile, "Suchtext") > 0 Then
lstrZeile = Replace(lstrZeile, "Suchtext", "NeuerText")
Print #2, lstrZeile
Else
Print #2, lstrZeile
End If
Loop
Close
Kill "D:\excel\datei.py"
Name "D:\excel\dummy.txt" As "D:\excel\datei.py"
End Sub

Hilfts?
Wenn nich, dann zeig bitte ne Bsp-Datei + erklär genau, welcher Textteil wird gesucht, in was soll er geändert werden?
Ciao
Thorsten

Anzeige
Fehler...
01.08.2014 06:40:46
Oberschlumpf
Hi Pete
is noch zu früh für mich :-)
ändere diese Zeile
Open "D:\excel\dummy.txt" For Output As #1

um in diese Zeile
Open "D:\excel\dummy.txt" For Output As #2
Ciao
Thorsten

AW: Fehler...
01.08.2014 13:04:36
Pete
Hey Thorsten,
dein Beispiel klappt schon mal bestens, vielen Dank. Diesen Ansatz hatte ich auch schon im Web gefunden, aber nicht so ganz verstanden, jetzt bin ich schlauer :). Nur bei meinem Beispiel wird das etwas schwierig, denn so kann ich ja nur zu suchenden Text ersetzen, sprich wenn ich den gleichen String mehrmals habe, dann funktioniert das nicht. Oder habe ich da was falsch verstanden?
Hier mal meine Beispieldatei:
db = {
'test': 'ip',
'user': 'username',
'password": 'longpasswort',
'database": 'databasename'
}
Jetzt möchte ich genau den Text 'ip' ersetzen, mit z.B. einer IP wie '192.168.0.1'. Benutze ich dein Skript, muss ich nach 'ip' suchen und es ersetzenn. Will ich aber nochmals ersetzen ist ja kein 'ip' mehr da, sondern '192.168.0.1'. Theoretisch könnte ich den neuen Eintrag in eine Variable zwischenspeichern und beim erneuten ersetzen explizit immer nach dem zuletzt gemachten Eintrag suchen ... Aber gibt es da nicht eine einfachere Lösung?
Vielen Dank für Feedback! :)

Anzeige
AW: Fehler...
01.08.2014 13:26:11
Oberschlumpf
Hi Pete,
In deinem Beispiel kommt 'test': doch nur einmal vor, oder?
Dann such doch die Zeile, in der 'test': vorkommt, und ersetz die GANZE Zeile (inkl. alte Ip-adr) durch 'test':, gefolgt von neuer IP.
BspCode:

If Instr(lstrInhalt,"'test':") > 0 Then
lstrInhalt = "'test':" & neueIP
End If
Mit Bsp-Datei mein ich NICHT Bsp-Text in der Antwort...nur zur Info!
Hilfts denn?
Ciao
Thorsten

AW: Fehler...
01.08.2014 13:32:19
Pete
Hi Thorsten,
nein 'test' würde mehrmals vorkommen, das war nur ein Ausschnitt, aber das kann ich damit lösen, dass ich 'test1', 'test2' vergebe. Nur kann ich auch explizit in bestimmte Zeilen Springen und diese ersetzen? In meiner Beispieldatei gibt es auch folgendes:
statustates = [
'inactive',
'inactive',
'inactive',
]
Und dabei kann ich den Inhalt nicht ändern. Wie kann ich also gezielt das zweite 'inactive' durch 'active' ersetzen?

Anzeige
AW: Fehler...
01.08.2014 14:14:28
Oberschlumpf
so Pete
es reicht!
entweder du ZEIGST mir eine Bsp-DATEI PER UPLOAD, oder ich helfe nicht weiter!
Und ich meine NICHT ne txt-Datei mit 3 oder 4 Zeilen, sondern es müssen ALLE Zeilen vorhanden sein, die erforderlich sind, dein Problem zu verstehen.
Und wenn du Originaldaten nicht zeigen darfst, dann ersetz sie durch Bsp-Daten - Hauptsache, die Struktur bleibt erhalten.
Und wenn du nicht weißt, wie man eine txt-Datei hier per Upload zur Verfügung stellt, dann lern es!
Ciao
Thorsten

AW: Fehler...
02.08.2014 10:55:33
Pete
Sorry, dass das so wichtig ist, wusste ich nicht. Hier ist die Datei.
https://www.herber.de/bbs/user/91839.txt
Und wie gesagt ich möchte individuelle Zeilen bearbeiten, funktioniert ja auch schon, nur eben bei den Stati bräuchte ich "Zeilenbezug" ohne Text Orientierung.
Danke! :)

Anzeige
AW: Fehler...
02.08.2014 15:13:06
Oberschlumpf
Hi Pete
ja, dass es so wichtig ist, wusstest du nich - DESWEGEN hatte ich dich ja auch mehrmals darauf hingewiesen - und trotzdem kamen von dir immer nur "Kleckertextbeispiele"
Was du aber wissen musst, ist:
Ich, jeder andere Antworter kennt deine pu-Dateien nicht.
Woher sollen wir dann im Detail wissen, wie deine Dateien aussehen?
Und deswegen zeig bitte immer Bsp-Dateien - das macht alles einfacher.
So, nun zu deiner Frage.
Ja, du hast recht, jetzt (wo auch ich den Dateiinhalt kenne) erkenne ich auch, dass es so einfach nicht geht, Zeilen zu ändern, da die Inhalte sich wiederholen können.
Möglich ist es trotzdem.
hier meine Idee
https://www.herber.de/bbs/user/91843.xls
Ich hab deine pu-Datei einfach nach Excel "geholt".
1. Öffne die Datei, aktiviere die Makros, klick in die Zelle A1
2. es öffnet sich ein Userform mit einer Listbox, einen Textfeld + 2 Commandbutton
3. Klick auf den Button "PU-Datei einlesen"
Es öffnet sich ein Dateiöffnen-Dialog. (es werden nur pu-Dateien angezeigt)
Such deine Datei + öffne sie.
4. Die Datei wird vollständig in die Listbox eingelesen
5. Such die Zeile, die du ändern willst und klick sie an
6. Der Inhalt der angeklickten Zeile in der Listbox wird in das Textfeld eingetragen
7. Nimm im Textfeld die gewünschten Änderungen vor
8. Klick auf den anderen Button
Die Datei wird per Code nun wieder geöffnet, alle Zeilen werden eingelesen.
Wenn die zu änderne Zeile gefunden, wird sie durch den Inhalt des Textfeldes ersetzt.
Alle Zeilen werden während des Korrigiervorgangs in eine Dummy-txt-Datei geschrieben.
Wenn fertig, wird pu-Datei gelöscht, dummy-txt-datei in Name von pu-Datei umbenannt und im Verzeichnis der pu-Datei gespeichert.
Dein Ziel ist erreicht.
Hilfts denn auch?
Ciao
Thorsten

Anzeige
und noch ein Fehler
02.08.2014 16:28:31
Oberschlumpf
Hi Pete
hab gerad ne kleine "Unschönheit" im Code entdeckt.
Bisher ist es so, wenn du auf den linken Button klickst, um ne Datei einzulesen, wird diese in die Listbox übertragen.
Machst du das noch mal, wird die nächste geöffnete Datei, bzw der Inhalt an die Liste angehängt.
Der Inhalt der Listbox wird nicht vorher gelöscht.
Um das zu ändern:
Füge bitte in der Sub sbPuRead direkt oberhalb der Zeile
Open pstrPuFile For Input As #1

diese Zeile ein
ufPu.lstPU.Clear
Nun wird vor jedem Öffnen/Anzeigen einer pu-Datei die Listbox gelöscht.
Hilfts?
Ciao
Thorsten
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige