nuker5
Goto Top

Per Batch Textfragmente in Gänsefüßchen Stellen

Hallo miteinander,

dieses Forum ist ja echt Gold wert. Vielleicht könnte mir jemand hier weiterhelfen.
Ich habe in Textdateien Fragmente folgenden Formats stehen

----- Schnipp
anderererText
Sortierung.Fix1=zuersetzenderText
Sortierung.Fix2=zuersetzenderText
Sortierung.Default1=zuersetzenderText
Sortierung.Default2=zuersetzenderText
Sortierung.Default3=zuersetzenderText
anderererText
----- Schnapp

und der soll geändert werden in

----- Schnipp
anderererText
Sortierung.Fix1="zuersetzenderText"
Sortierung.Fix2="zuersetzenderText"
Sortierung.Default1="zuersetzenderText"
Sortierung.Default2="zuersetzenderText"
Sortierung.Default3="zuersetzenderText"
anderererText
----- Schnapp

also jeweils nur die Gänsefüßchen hinzufügt werden.
Gibt es eine Möglichkeit, das über Batch zu realisieren?
Die Zahlen hinter Fix und Default können auch variieren, sind also aufsteigend und können pro Textdatei unterschiedlich ein in der Anzahl (also mal 1-3 und mal 1-9 usw.)

Man müsste also etwa so suchen
Suche Sortierung.*=Textbiszeilenende ersezte Textbiszeilenende mit "Textbiszeilenende"

Sowas geht doch sicherlich nur über RegExpressions. Gibt es eventuell ein Fremdprogramm, dass sowas kann.

Für Hilfe wäre ich echt verbunden.

Vielen Dank

Marcel

Content-Key: 59838

Url: https://administrator.de/contentid/59838

Printed on: December 5, 2022 at 16:12 o'clock

Member: AxelHahn
AxelHahn May 25, 2007 at 16:16:36 (UTC)
Goto Top
Hi Marcel,

mit regex ersetzen ... ginge mit einer sed-Protierung für Windows.
Mit Batch kannst du dein Textfile (Variable IN) zeilenweise lesen und dann die Zeile auseinandernehmen. Der Text vor dem = wird ausgegeben, dann das = selbst und dahinter der Text nach dem Gleichheitszeichen in Anführungszeichen.
Das Ganze ist vielleicht optimierungsbedürftig - aber so geht es und ist noch lesbar.


Viele Grüsse
-= Axel =-
Member: miniversum
miniversum May 25, 2007 at 16:51:29 (UTC)
Goto Top
Jetzt mal ungetestet hät ichs so versucht:
@echo off
for /F "tokens=1-3 delims=.=" %%a in ('type "dateiohne.txt"') do (
if "%%a" equ "Sortierung" (
echo %%a.%%b="%%c">>dateimit.txt
) else (
echo %%a%%b%%c>>dateimit.txt
)
)

miniversum
Member: Nuker5
Nuker5 May 25, 2007 at 19:05:35 (UTC)
Goto Top
Der Vorschlag von AxelHahn geht schon etwas in die Richtung.
Allerdings werden hier alles Zeilen, wo ein = vorkommt mit Gänsefüßchen versehen.
Und es wäre schön, wenn das nicht nur für eine Datei sondern auch für 100 Dateien ginge.
Und es werden Leerzeichen nicht berücksichtigt.
Aus z.B.
{
wird dann
{

Der Vorschlag von miniversum führt die Dateien sozusagen in einen nicht verwendbaren Zustand da hier kein Stein auf anderen gelassen wird. Die Datei ist nicht mehr zu erkennen.
Es sind alle Gleichheitszeichen und fast alle Gänsefüßchen beschnitten...

Wäre toll, wenn ihr mir dabei noch helfen könntet.

Danke.
Member: miniversum
miniversum May 26, 2007 at 09:15:57 (UTC)
Goto Top
Hab gerade die von mir gepostete (vorher ungetestete) batch getestet.

Da da allerdings alles verändert wird konnte ich bei mir nicht feststellen.
meine Datei"dateiohne.txt" sieht so aus:
Und die erzeugte Datei "dateimit.txt" sieht dann so aus:

Ich kann also deinen Beschriebenen Effekt nicht nachvollziehen. Poste doch mal wie bei dir das Ergebnis aussieht (auszugsweise)?

Um mehrere Dateien zu verarbeiten kansnt du meine Batch folgendermasen umbauen:

So wird erstmal nur von jeder Datei eine Kopie angelegt mit der Erweiterung "_neu". Wenn dann alles läuft wie es soll kannst du dann die Dateien auch gleich wie die alten Dateien umbenennen lassen indem du vor der letzten ) noch folgende Zeilen einfügst:
del "%verzeichnis%%%f"
rename "%verzeichnis%%%~nf_neu%%~xf" "%verzeichnis%%%f"

miniversum
Member: miniversum
miniversum May 27, 2007 at 11:26:23 (UTC)
Goto Top
Nach deiner Nachricht bin ich auf folgende Batch gekommen die das tun sollte was du haben möchstest (erstmal nur für eine Datei):

Willst du das ganze für mehrere Dateien haben (die alle im Verzeichnis C:\quelldateien\ ) liegen und die Endung .lst haben dann kannt du das so machen:

Ich hoffe das hilft dir?

miniversum
Member: Nuker5
Nuker5 May 27, 2007 at 19:15:37 (UTC)
Goto Top
Total genial. Funktioniert erstmal soweit.
Die Batch mit den Verzeichnissen würde ich gern noch so anpassen, dass er das auch in Unterverzeichnissen macht, was sich ja mit dem zusätzlichen Parameter /s beim Befehl DIR realisieren ließe. Allerdings sollen die Dateien nicht in ein anderes Verzeichnis geschrieben werden sondern in jedem Originalverzeichnis soll zuerst eine Kopie landen, was ja mit dem XCOPY-Befehl problemlos möglich ist, und dann sollen die Originaldateien mit den Gänsefüßchen ersetzt werden.
Das bekomme ich über diese Batch noch nicht hin, denn über Pipe wird ja eine _Neu angehängt.
Bin ich da richtig in der Annahme, dass da mit einem move alles was *_neu.lst *.lst gemovt werden muss?
Member: miniversum
miniversum May 28, 2007 at 10:06:19 (UTC)
Goto Top
Also ohne zu testen würd ichs dan entsprechend so umbauen:

So sollten neue Dateien erzeugt werden (Dateiname_neu.lst) die im gleichen Verzeichniss sind wie die orginaldateien. Das mit dem Dir /s ist ja auch drin. Das in quellverzeichnis angegebene Verzeichniss dient als stammverzeichniss von dem aus dieses und alle Unterverzeichnisse durchsucht werden.
Das mit dem ersetzen mit move habe ich erstmal auskommentiert. Wenn es so funktioniert kannst du ja das REM in der vorletzten Zeile rausnehmen.

miniversum
Member: Nuker5
Nuker5 May 29, 2007 at 12:34:43 (UTC)
Goto Top
Schade. Nein funktioniert leider nicht.
Leider bekomme ich keine Fehlermeldung in der Batch und die Befehle werden anscheinend auch nicht abgearbeitet, weil er braucht einen Bruchteil einer Sekunde...
im Batchverzeichnis landet dann eine Datei mit 0 Byte namens: !

Hättest Du da noch einen Rat, miniversum?
Member: miniversum
miniversum May 29, 2007 at 14:25:45 (UTC)
Goto Top
ok jetzt auch die getestete Version die bei mir Funktioniert.
So werden erstmal nur die neuen Dateien erstellt.
Wird das REM in der Vorletzten zeile entfernt werden die alten Dateien gleich ersetzt.
Jetzt könnte es nurnoch Probleme mit ! innerhalb der Dateien geben???

miniversum
Member: Nuker5
Nuker5 May 30, 2007 at 15:01:46 (UTC)
Goto Top
Ich habe leider immer noch etwas zu meckern...

1. Gibt es nicht eine Möglichkeit, dass Leerzeilen auch Leerzeilen bleiben?
2. Gibt es die Möglichkeit, dass Felder, wo schon ein Sonder....="...

steht, diese auszulassen, also alles wo ein Sonder drin enthalten ist und ="
schon drin steht nämlich dann =""...


Marcel
Member: Nuker5
Nuker5 May 31, 2007 at 14:19:14 (UTC)
Goto Top
Kann mir hier denn jetzt niemand mehr weiterhelfen?
Wäre schön, wenn das ginge...

Vielen vielen Dank für die bisherige Hilfe.

Miniversum, hättest Du da vielleicht noch eine Idee?

Vielen Dank

Marcel
Member: miniversum
miniversum May 31, 2007 at 17:38:06 (UTC)
Goto Top
Sorry. Da das Forum heute morgen nicht ging antworte ich erst jetzt.
zu 2.:
Versuchs mal so:
Beim fettgedruckten mußt du mal schauen ob die Anzahl der Leerzeichen stimmt. Ich habe leider die Datei von dir gelöscht. Aber schau sie dir einfach mit einem Editor an und schau wieviele Leezeichen du dort davor hast. Soltest du Leerzeichen hinzufügen oder löschen must du auch beim, in der gleichen Zeile stehende, !line:~0,9! die 9 an die Anzahl der Zeichen dann anpassen.

zu 1.:
Das geht im Batch schlecht. In vbs würde sowas besser gehen wenn es Umbedingt erforderlich ist. In vbs kenne ich mich leider nicht aus. Da müßte dich Bastla woll einklinken dann.

miniversum
Member: Biber
Biber May 31, 2007 at 18:03:52 (UTC)
Goto Top
Moin Nuker5 und miniversum,

bis bastla kommt, versuchts mal hiermit:

Die Geschichte mit den "<" und ">" -Zeichen habe ich nicht als Anforderung gesehen.
Falls da XML-(ähnliche)-Tags in den Quelldateien sind, dann kann das mit rein (siehe miniversums Schnipsel).

Sonst bitte ich mal um eine "typische" Inputdatei, damit wir alle gegen die gleiche Anforderung vor uns hin coden...

Grüße
Biber
Grüße
Biber
Member: miniversum
miniversum May 31, 2007 at 18:32:25 (UTC)
Goto Top
Dein Code könnte passen. Die < und > must du Berücksichtigen. das problem hattte ich zu beginn auch.
Die datei hat nen Aufbau alla:
[blablabla]
bliblibli
blöblöblö=blublublub
Sicherung.Fix1=irgentwas
blumblumblum=bla <2>

Die Einrückungen sind tabs.

Das findstr hab ich absichtlich weggelassen weils erstens länger dauert (Die Datei hat viele Zeilen) und zweitens ich ausschliesen Wollte das hinter dem Gleichheitszichen nicht auch eine solche Zeichenkette vorkommen kann.

miniversum

PS: An den Ansatz mit dem Findstr zum erzeugen einer Datei und auslesen des Teils nach dem : hab ich nicht dran gedacht.
Member: Nuker5
Nuker5 Jun 05, 2007 at 22:50:16 (UTC)
Goto Top
Also,

hallo biber und miniversum,

sorry, dass ich mich nicht gemeldet habe. Lag total flach. Aber ich kann jetzt frisch weiter mit dem nächsten Fehler ace-sad".
Ich möchte Euch ja nicht nerven, aber bei diesem Advanced Batch Programming kann ich wirklich fast nur zusehen...
Also ich rufe die Batch von Biber auf, die erste Datei wird angefasst, das steht dann als erstes "Das Sprungziel eof) wurde nicht gefunden."
Dann macht er ein paar Zeilen was und geht dann mit einem Fehler raus: "]" ist syntatktisch an dieser Stelle nicht verarbeitbar. Das hatte mit miniversums Batch alles so funktioniert, bis eben auf die Leerzeile.

Vielleicht könntet Ihr mir da bitte nochmal weiterhelfen. Das wäre echt toll.

Vielen Dank.

Marcel
Member: miniversum
miniversum Jun 06, 2007 at 10:07:34 (UTC)
Goto Top
So hier jetzt mein Vorschlag mit der Verarbeitung von Leerzeilen nach Bibers Ansatz:

miniversum

PS: Sollte laufen solange keine ! enthalten sind.
Member: miniversum
miniversum Jun 06, 2007 at 11:33:50 (UTC)
Goto Top
Ok her jetzt mit etwas mehr Zeit.
Also dies hier sollte alles mit Leerzeilen und auch enthaltene ! verarbeiten.

miniversum
Member: Nuker5
Nuker5 Jun 06, 2007 at 12:01:40 (UTC)
Goto Top
Hallo Miniversum,

leider hat das noch nicht funktioniert.
ich bekomme folgende Fehlerausschriften:
Datei "c:\....\a.lst" wird verarbeitet.
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung
ist falsch.
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung
ist falsch.
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung
ist falsch.
Das System kann den angegebenen Pfad nicht finden.
Das System kann den angegebenen Pfad nicht finden.
Das System kann den angegebenen Pfad nicht finden.
Das System kann den angegebenen Pfad nicht finden.
Das System kann den angegebenen Pfad nicht finden.

Grüße Marcel
Member: Biber
Biber Jun 06, 2007 at 12:24:52 (UTC)
Goto Top
Hmm,
mein BSM (bio-optical scanning module sacht:
Streiche: do call ProzLine
Setze: do call :ProzLine

Gruss Biber
Member: miniversum
miniversum Jun 06, 2007 at 12:46:48 (UTC)
Goto Top
Also habs grade nochmal ausprobiert (weil ich die andern ja ohne zu testen geschrieben hab).
Mein erstes sollte gehen:
Das läuft bei mir Fehlerfrei durch.

Am andern Arbeit ich noch.
miniversum
Member: miniversum
miniversum Jun 06, 2007 at 13:18:48 (UTC)
Goto Top
So Problem gefunden.
Der Ansatz mit den calls gehen nicht.
Der Grund liegt darin darin, dass in der Datei mehrere Zeilen vorkommen die folgende Zeichenfolge beinhalten:
W + " " +A
Dies macht beim Aufruf Probleme weil das
call ProzLine "%%l" "%~2"
nicht mehr aus zwei sondern aus drei parametern dan besteht.

Nimm einfach die Batch die ich im vorigen Posting habe. Die läuft bei mir durch ohne Probleme.

miniversum
Member: Nuker5
Nuker5 Jun 06, 2007 at 14:31:09 (UTC)
Goto Top
Das heißt also, die Version, die die Leerzeilen nicht berücksichtigt?
Member: miniversum
miniversum Jun 06, 2007 at 14:56:11 (UTC)
Goto Top
Nein diese hier:

Es werden auch Leerzeilen berücksichtigt.

miniversum
Member: Nuker5
Nuker5 Jun 07, 2007 at 18:52:00 (UTC)
Goto Top
Es tut mir ja leid, aber damit habe ich eben zwei Probleme:
1. Die Leerzeilen werden mit folgendem gefüllt: ECHO ist ausgeschaltet (OFF).
2. Dort wo die Leerzeichen vor "Sortierung" abweichen wird es nicht gesetzt.

Wenn man das in der Batch-Version noch korrigieren könnte wäre das die eierlegende Wollmilchsau für mich, dann hätte ich alles war ich brauch.
Sag einfach wenn es nicht geht, dann lasse ich die Batch-Version so, die ohne Leerzeilen arbeitet und muss mit der Einschränkung mit den Leerzeichen leben.
Danke nochmal für die bisherige Hilfe.

Marcel
Member: miniversum
miniversum Jun 08, 2007 at 12:01:08 (UTC)
Goto Top
Hab sie gerade nochmal überarbeitet.
Schau mal obs so funktioniert wie soll:
Achte auf die Zeile in der Mitte:
set cline=!cline: =! & REM hier ein Tabulator, keine Leerzeichen!
Dort mußt zwischen dem : und dem = einen Tabulator sein. Nicht das es durchs copy und Paste verlohren geht....
Hab die mit der Datei von der ausprobiert und lief.

miniversum
Member: Nuker5
Nuker5 Jun 09, 2007 at 12:03:15 (UTC)
Goto Top
Super dankeschön. Funktioniert jetzt komplett.
Danke danke.
Damit erledigt.
Member: miniversum
miniversum Jun 09, 2007 at 12:59:21 (UTC)
Goto Top
Dann sit gut. hat mich jetzt doch der Ehrgeiz gepackt das hinzubekommen.

miniversum