Daten in Textdateien ändern???
Hallo
ich schildere mal mein kleines Problem, vieleicht hat jemand eine Lösung füs mich :S
Nun ich habe einen Ordner mit hunderten Textdateien (Endung lautet *.nc1, da es NC-Daten sind). In jeder Datei auf der vierten Zeile stehet eine Zahl, welche ich überschreiben muss - Datei speichern und die nächste öffnen. Nun läuft es mir zuwieder diese Masse an Dateien zu öffnen, von Hand zu überschreiben und zu speichern.
Hat jemand eine einfache Lösung für eine Art "Stapelverarbeitung"? Oder ein Vorschlag, wie in ein Programm erstellen kann, welches genau dies macht?
Bin um jeden Hinweis dankbar :)
Gruss
maeder1
Antwort schreiben
Antwort 2 von son_quatsch vom 11.06.2020, 08:40 Options
Ja, besorge dir einen Editor, der eine Funktion hat wie z.B. "Suchen und Ersetzen in Dateien". Ein Kandidat wäre UltraEdit. Dort gibst du als Suchtext beispielsweise \n[0-9]+\n, als Ersetzungstext \n0815\n, als Dateitypen *.nc1 und als Verzeichnis jenes, in dem die Dateien stehen. Dann noch die Option Unterverzeichnisse durchsuchen deselektieren und Reguläre Ausdrücke selektieren.
Jetzt der schwierige Teil: reguläre Ausdrücke sind spezielle Such- und Ersetzungsmuster. Wenn es beispielsweise die einzige Zeile in den Dateien mit einer Zahl ist, dann wird auch nur die ersetzt. Ansonsten müssen wir das ganze erweitern (z.B., wie sieht die Zeile davor und die danach aus, damit auch wirklich NUR die eine Zeile mit der Zahl gefunden wird).
Wenn ich dir eine komplette Anleitung geben soll, dann
- lad dir UltraEdit runter und
- zeig hier den Inhalt einer NC1-Datei als Beispiel.
Antwort 3 von maeder1 vom 11.06.2020, 11:41 Options
Hallo
das Problem ist, dass nur das Zeichen auf Zeile 4 überschrieben werden muss. Die Zahl welche dort steht, kann aber noch mehrmals im Dokument erscheinen und darf dort aber nicht überschrieben werden. Hier der Inhalt:
ST
** M_4.nc1
1182
1
M.4
M.4
S355J0
1
HEA1000
I
17670.00
990.00
300.00
31.00
16.50
30.00
272.000
3.100
0.000
0.000
0.000
0.000
AK
v 0.00s 0.00 0.00 0.00 0.00 0.00 0.00
17670.00 0.00 0.00 0.00 0.00 0.00 0.00
17670.00 990.00 0.00 0.00 0.00 0.00 0.00
0.00 990.00 0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00
AK
o 0.00s 0.00 0.00 0.00 0.00 0.00 0.00
0.00 300.00 0.00 0.00 0.00 0.00 0.00
17670.00 300.00 0.00 0.00 0.00 0.00 0.00
17670.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00
AK
u 0.00s 0.00 0.00 0.00 0.00 0.00 0.00
17670.00 0.00 0.00 0.00 0.00 0.00 0.00
17670.00 300.00 0.00 0.00 0.00 0.00 0.00
0.00 300.00 0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00
BO
o 400.00s 65.00 14.00
o 1200.00s 65.00 14.00
o 2000.00s 65.00 14.00
o 2800.00s 65.00 14.00
o 3600.00s 65.00 14.00
o 4400.00s 65.00 14.00
o 5200.00s 65.00 14.00
o 6000.00s 65.00 14.00
o 6400.00s 65.00 14.00
o 7200.00s 65.00 14.00
o 8000.00s 65.00 14.00
o 8800.00s 65.00 14.00
o 9600.00s 65.00 14.00
o 10400.00s 65.00 14.00
o 11200.00s 65.00 14.00
o 12000.00s 65.00 14.00
o 12600.00s 65.00 14.00
o 13400.00s 65.00 14.00
o 14200.00s 65.00 14.00
o 15000.00s 65.00 14.00
o 15800.00s 65.00 14.00
o 16600.00s 65.00 14.00
o 17400.00s 65.00 14.00
BO
u 45.00s 65.00 22.00
u 45.00s 235.00 22.00
u 355.00s 65.00 22.00
u 355.00s 235.00 22.00
u 12020.00s 65.00 22.00
u 12020.00s 235.00 22.00
u 12380.00s 65.00 22.00
u 12380.00s 235.00 22.00
EN
Hier steht nun in der vierten Zeile die Zahl 1 (kann aber auch eine andere, auch mehrstellige, sein. Die müsste ich ersetzen. Mit SR-Manager kann das, soviel ich herausgefunden habe, nicht funktionieren, da dann ja alle 1 überschrieben werden...
Antwort 4 von Teerbaby vom 11.06.2020, 12:28 Options
Wird wohl auch mit einer Regular Expression schwierig.
Das einzige was mir einfallen würde, wäre ein kleines Programm schreiben, dass die Dateien zeilenweise ausliest oder die Dateien in eine Datenbank einzulesen und dann die Tabelle per SQL zu ändern.
Antwort 5 von son_quatsch vom 11.06.2020, 12:37 Options
Gesetzt den Fall, dass
- eine Zeile der Datei nur ST enthält,
- die darauffolgende mit ** beginnt,
- die darauffolgende mit zwei Leerzeichen beginnt,
- die darauffolgende mit zwei Leerzeichen beginnt,
- im Rest jener Zeile nur Ziffern vorkommen
und ALL diese Regeln nur ein einziges Mal in jeder Datei zutreffen, dann sieht der Suchbegriff so aus:
^(ST\p\*\*.+\p .+\p )[0-9]+\p
...und die Ersetzung:
\1666\p
(wobei 666 die neue Zahl wäre)
Antwort 6 von disco vom 11.06.2020, 12:42 Options
moin
ich weiss nicht welche programmiersprache dir zur verfügung steht, aber das vorgehen ist ja sehr einfach.
-alle dateien zeilenweise einlesen und in neue datei schreiben.
-wenn zeile = 4 ist, diese zeile auslassen und stattdessen deinen alternativen text/zahl ausgeben.
datenbanken und sonstiges sind hier nicht nötig.
in java/php/perl/... sollten das nicht mehr als 15 zeilen code sein.
g,
disco
Antwort 7 von maeder1 vom 11.06.2020, 13:38 Options
die Dateien sehen alle ähnlich aus. Der untere (und sehr grosse Teil) sind Koordinaten, diese variieren. Aber ansonsten bleibt der Aufbau der Datei gleich.
Betreffend Programmiersprachen, ein bisschen VB könnte ich herbrösmeln, wäre damit was zu schaffen?
Antwort 8 von son_quatsch vom 11.06.2020, 13:53 Options
Wie gesagt - ich hab im Klartext geschrieben, wonach mein regulärer Ausdruck sucht und was damit EXAKT gleich sein muss (alles nach der vierten Zeile interessiert keinen). Kombiniert mit genanntem Editor ist die Aufgabe zu 100% lösbar.
Woran haperts?
Antwort 9 von maeder1 vom 11.06.2020, 14:12 Options
@son_quatsch
also die Dateien entsprechen genau Deinen Regeln, habst nochmals geprüft. aber UltraEdit sagt "0 Einträge ersetzt in 0 Datei(en)"
weiss nicht was noch ein Problem darstellen könnte. Vieleich bin ich zum bedienen zu dumm ;)
soll ich mal ne datei onlinestellen?
Antwort 10 von son_quatsch vom 11.06.2020, 14:26 Options
Ah Danke - das war schön detailliert :-)
Ja, lad mal eine hoch - und zusätzlich überprüfst du in UltraEdit bitte bei Extras -> Optionen -> Suchen -> ob "Reguläre Ausdrücke im UNIX-Stil" aktiviert ist. Falls nicht, anhaken und nochmal probieren.
Antwort 11 von maeder1 vom 11.06.2020, 15:15 Options
Also
hier kannst Du die NC-Datei runterladen. Die Einstellung werd ich heute Abend kurz testen.
Danke schonmal
gruss
maeder1
Antwort 12 von son_quatsch vom 11.06.2020, 16:05 Options
Bestens, habs mit der einen probiert und es hat geklappt, wie es sollte. Jetzt müssen wir es nur noch bei dir schaffen ;-)
Antwort 13 von maeder1 vom 01.07.2020, 16:00 Options
Bin auch wiedermal hier.
Leider hab ichs bis jetzt noch immer nicht geschafft.
An irgendwas scheitere ich andauernd, aber ultraedit will mir nicht sagen, was das Problem ist.
Ich hab die Version 14.00b ist die ok?
kannst du mir evtl. die optionen (sind ja importier und exportierbar) zusenden?
gruss
maeder1
Antwort 14 von son_quatsch vom 02.07.2020, 08:34 OptionsLösung
Ich hab 11.00 und kann nichts exportieren. Achte bei den Optionen im Bereich "Suchen" darauf, dass die Option "Reguläre Ausdrücke im UNIX-Stil" aktiviert ist.
Ansonsten musst du mir die Fehlermeldung von "irgendwas" sagen.
Antwort 15 von maeder1 vom 02.07.2020, 08:48 Options
demnach gibt es mit 14.00b einige neue Funktionen... Ich habe aber noch eine andere Lösung gefunden: Marko! Im 14.00 ist es möglich (ähnlich VBA in Excel) ein Makro zu "programmieren". So kann ich alle Dateien öffnen und das Makro wiederholen lassen bis alle Daten weg sind.
Demnach hat sich mein Problem erledigt :) Danke für die Tipps und Hinweise.
Gruss
maeder1