Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Text suchen und ersetzen (mal wieder)

Frage Entwicklung Batch & Shell

Mitglied: RaiderX

RaiderX (Level 1) - Jetzt verbinden

10.03.2009, aktualisiert 15.07.2010, 4365 Aufrufe, 10 Kommentare

Teile aus Textzeilen aus einer Datei raussuchen und durch anderen Text ersetzen

Hallo zusammen...

ich habe eine Schnittstellendatei, die verschiedene Datensätze einmal im Monat von einem Programm zum nächsten weiterreicht.
Hier zwei Beispielzeilen:
---snip
00820123412182xxxxxx xxxxxx xxxxxx 15 a xxxxxxxxxxxx 2009100120092 33,341xxxxxx, 1/2009 J100900xxxxxxxxxx03001
00841000002002 2009100120092 35,001xxxxx, 1/2009 N 001

Zeilen die wie folgt anfangen, müssten geändert werden:
84100000200 in 84100000219
84100000214 in 84100000220
84100000218 in 84100000221


Das vorherige Backup der Datei bekomm ich hin:
copy y:\Cipsol.txt y:\Cipsol_Backup.txt /Y
(nice to have: Wie fange ich einen nicht funktionierenden Kopiervorgang ab?)

Den Rest müsste ich mit findstr machen, aber da bekomm ich die Syntax nicht hin. In der Kommandozeile bekomm ich mit "findstr /b /L 0084100000200 y:\Cipsol.txt" zumindest die fraglichen Zeilen angezeigt, aber dann hörts auf.

Umgebung: Win XP/2000, Domänenumgebung, Admin-Rechte

Im Moment ratlose Grüße,
RX
Mitglied: miniversum
10.03.2009 um 21:20 Uhr
Wenn keine Sonderzeichen ()&<>% enthalten sind gehts so (ungetestet):
01.
@echo off 
02.
if exist outDatei.txt del outDatei.txt 
03.
FOR /F "delims=" %%i in (inDatei.txt) do call:verarbeite "%%i" 
04.
goto:eof 
05.
 
06.
:verarbeite 
07.
set "line=%~1" 
08.
if "%line:~0,11%" equ "84100000200" ( 
09.
>> outDatei.txt echo 84100000219%line:~11% 
10.
) else ( 
11.
if "%line:~0,11%" equ "84100000214" ( 
12.
>> outDatei.txt echo 84100000220%line:~11% 
13.
) else ( 
14.
if "%line:~0,11%" equ "84100000218" ( 
15.
>> outDatei.txt echo 84100000221%line:~11% 
16.
) else ( 
17.
>> outDatei.txt echo %line% 
18.
19.
20.
)
Bitte warten ..
Mitglied: Biber
10.03.2009 um 21:28 Uhr
Moin RaiderX,

ich poste da jetzt keine Lösung, bitte Dich aber, diesen Kommentar dennoch wohlwollend weiterzulesen.

Ich halte diesen automatisierten Prozess, den Du jetzt etablieren willst für handwerklich umsetzbar, aber für grundlegend falsch und gefährlich.

Begründung
Wir haben hier zwar pro Monat gefühlte 100 ähnlich klingende "Suchen- und Ersetzen in Textdateien"-Anforderungen, aber
  • es geht meist um Konvertierungen/Umformatierungen - die Reihenfolge in der Quelldatei ist anders als in der Zieldatei oder aus *.txt mach .csv
  • oder Filterungen/Selektionen - z.B. alle Dubletten wegfiltern oder nur die einer "1" im siebten Feld
  • oder um Gruppenverarbeitung - mach mir aus untrschiedlichen Kopf+Detaildatensätzen jeweils gleichförmige Sätze

-> ..... alles Suchen- und Ersetzen-Operationen, an denen am Layout der Quelldatei viel, aber am Inhalt, der gelieferten Information der Quelldaten eigentlich nichts geändert wird.

Okay, manchmal kommen Anforderungen wie "wenn in der Quelldatei ein Feld leer ist, soll in der Zieldatei dafür "NULL" stehen oder so - aber auch das ist eher nur Layoutfrage.

Was man/frau niemalsnienich tun sollte ist aber, sich mit einem automatisierten Prozess in eine dauerhaft bestehende Schnittstelle hängen und dort das, was die Quelle als ID "X" liefert dem Ziel als "ID "U" unterjubeln.

Wenn es eine einmalige Aktion wäre - ich müsste alle bisherigen Artikelnummern 0815 in 4711 umändern, weil wir halt den Nummernkreis neu geordnet haben - dann okay.

Aber wie Du es schreibst, nämlich zwei Systeme, die offensichtlich die (logisch) gleichen Datensätze unter vollkommen unterschiedlichen IDs kennen........
---> steck da keine 5 Minuten Aufwand rein, diese Dateninkonsistenz noch mit einem Suchen/Ersetzen sozusagen unsichtbar zu machen.
Im Gegenteil -
  • hol Dir die Verantwortlichen/Betreiber der beiden Programme ran,
  • leg Deine o.g. Erkenntnisse bzgl der Schlüsselinkompatibilität auf den Tisch
  • und sag "Ich möchte jetzt mal eine Aussage, bis wann diese in Euren beiden Systemen unter unterschiedlichen Schlüsseln bekannten Objekte (oder Artikel oder Vorgangsnummer oder was immer es ist) wieder synchron sind."
  • dann schliesst Du Tür von innen ab, steckst den Schlüssel ein, setzt Dich wieder und fängst an, Zeitung zu lesen.

Mit allem anderen - insbesondere mit der Manipulation der gelieferten Quelldaten vor der Ablieferung beim Empfänger- machst Du Dich zum Täter statt zum Helfer.

Grüße
Biber
Bitte warten ..
Mitglied: IrrerIvan
12.07.2010 um 10:33 Uhr
Morgen zusammen,

hmm.. ich habe mir natürlich deinen Kommentar durchgelesen.

Ich habe dazu eine Frage.

Ich möchte auch eine Schnittstelle auslesen, dessen Dateiinhalt so aussieht:

B;0;001;;;;LG;30062010;062010;;1;481000;;;;1000;;;G;0;680000;;;100;;K;0;0300;;;;;;1000;481000;


Das Ziel soll dann so aussehen, damit es in ein anderes Programm eingelesen werden kann...


B;0;001;;;;LG;30062010;062010;;1;481000;;;;1000;;;
G;0;680000;;;100;;
K;0;0300;;;;;;1000;481000;

Ist das sinnvoll / möglich? / ratsam?


VG iI
Bitte warten ..
Mitglied: Biber
12.07.2010 um 11:45 Uhr
Moin IrrerIvan,

willkommen im Forum.

Soweit ich deine Beschreibung interpretieren kann, manipulierst du die Daten ja nicht inhaltlich.
Sondern nimmst nur eine Untermenge der (angebotenen) Spalten der Schnittstelle.

Okay, genau so soll es ja auch sein.

Die Problematik oben war ja eine andere.

Da war es so, dass die Schnittstelle Sätze bereitstellt, und alle die nun "Fritz" und "Heinz" heißen sollen durch eben mal als "Klaus" und "Bärbel" weitergereicht werden.

Das ist NICHT schön... denn wenn mal ein Datenschiefstand auftritt
-> und der Absender kann belegen, dass er aber "Fritz" und "Heinz" losgeschickt hat,
-> und der Empfänger kann belegen, dass bei ihm weder "Fritz" noch "Heinz" angekommen sind, dafür aber zwei bei ihm bestehende Datensätze namens "Klaus" und "Bärbel" mit falschen Daten überklatscht würden...

Hey, dann ist die nächste Import/Export-Schnittstelle, die du programmieren darfst an der Nordküste von Feuerland.

Gegen dein "Weglassen von nicht benötigten Feldern" (wie ich es interpretiere) spicht gar nichts.

[ Anmerkung: ich kann aber nur Antworten so treffsicher geben, wie der Input detailliert und vollständig ist.
Du hast 5 Zeilen gefragt und ich 15 geantwortet.--> Muss nicht heißen, dass wir beide jetzt alles berücksichtigt haben]

Grüße
Biber
Bitte warten ..
Mitglied: IrrerIvan
12.07.2010 um 12:25 Uhr
Danke erst mal für deine unglaublich zügige und auch witzige Antwort.

Also ich möchte eigentlich nix großartig weglassen. Sondern die Datei umformatieren. Und zwar so, daß die Daten halt nicht in einer Zeile stehen, sondern in zwei respektive drei Zeilen. Sonst kann das zweite Programm die Daten nicht einlesen. Es geht speziell um Buchungen über eine Schnittstelle.
Das Vorsystem gibt sie Einzeilig aus während das nachgelagerte System die dreizeilig haben möchte. o.O

gibt wohl noch keine Norm für Schnittstellen.

Ich kann auch sagen welche Systeme betroffen sind. Das eine ist eine I800 IBM und das andere ist Windows (SQL-Server)


Grüße iI
Bitte warten ..
Mitglied: Biber
12.07.2010 um 12:46 Uhr
Moin IrreIvan,

eine Umformatierung von einer auf eine mehrere Zeilen ist auch nicht zwingend eine Datenmanipulation.
Solange du nicht - wie oben beschrieben - aus einzelnen Datensätzen mit "X" Datensätze mit "U" machst (mit wie edlen Hintergedanken auch immer), solange machst du nichts Nicht-reprozierbares.

Ich habe auch Schnittstellen hier, der halt nur in einem verkack propieritären Herstellerformat rausgedrückt werden, das so nicht automatisiert weiterverarbeitet werden kann. --> muss ich auch "umformatieren".
Ich habe auch den Fall, das bei einer Schnittstelle ein "nicht gesetztes Endedatum" als "31.12.9999" exportiert wird. --> muss ich in allen Datensätzen vorher auf auf einen Wert ändern, der beim Empfänger "richtig" interpretiert werden,--> "so, wie es der Absender gemeint hat".

Und das letzte Unterstrichene wäre dann meine ganz persönliche Abgrenzung von "Datenumformatierung vs.Datenmanipulation."
Das kann ich beim Bau einer Schnittstelle vertreten und fachlich begründen.
Das Datenverfälschen von "Heinz" zu "Bärbel" aber nicht.

Grüße
Biber
Bitte warten ..
Mitglied: IrrerIvan
12.07.2010 um 13:28 Uhr
OK. kapiert. Formatieren OK. Manipulieren NICHT OK!

Jetzt meine finale Frage. Wie müsste denn die Batch-Datei aussehen, damit ich das bewerkstelligen kann?
Also ab einem bestimmten Ausdruck die nächste Zeile beginnen oder so! Weil die Ausgabedatei kann ich schon ein wenig beeinflussen aber halt nicht eine neue Zeile schreiben lassen. Sch.. IBM.

Habe das schon mit Ausdrücken wie \p und so versucht, aber das fruchtet alles nicht. SQL kann ich auch nicht (bzw. zu wenig)


iI
Bitte warten ..
Mitglied: Biber
12.07.2010 um 13:51 Uhr
Moin Irrerivan,

ich denke, dass ist rein handwerklich auch ohne mehrjähriges Informatik- oder Seifensiederstudium machbar

Dazu haben einige Dutzend Beispiel hier im Forum.

  • Für das Einlesen einer mit Semikolonnen getrennten Zeile mit Werten ist im Batch die FOR /F-Anweisung zuständig.
  • Für das Rausdrücken der ECHO-Befehl.

Hilfe dazu mit FOR /? bzw ECHO /? am CMD-Prompt.

Beispiel - deine Input-Zeile sieht so aus:
B;0;001;;;;LG;30062010;062010;;1;481000;;;;1000;;;G;0;680000;;;100;;K;0;0300;;;;;;1000;481000;
Als proof-of-concept möge reichen:
>set "einezeile=B;0;001;;;;LG;30062010;062010;;1;481000;;;;1000;;;G;0;680000;;;100;;K;0;0300;;;;;;1000;481000;" 
 
(=13:47:11  F:\Tüddlkrams=) 
>for /f "tokens=1-22 delims=;" %a in ("%einezeile%") do @(echo %a;%b;%c) & (@echo %g;%i%;%i) & @echo %r;%u;%v; 
B;0;001 
1;1000%;1000 
481000;;;
Versuch dich ranzutasten... wenn es gar nicht allein voran geht, dann mach bitte einen eigenen Beitrag auf.
Der hier riecht schon etwas streng.

Grüße
Biber
Bitte warten ..
Mitglied: IrrerIvan
14.07.2010 um 21:38 Uhr
Jo, werde ich machen, aber erst Montag. Vorher komme ich wohl nicht dazu!!!

Schönes Wo-Ende und danke...


iI
Bitte warten ..
Mitglied: Biber
15.07.2010 um 08:08 Uhr
Moin,


da hier wohl kein Feedback vom Beitragsersteller RaiderX mehr kommen wird, schliesse ich den Beitrag "ungelöst".

@IrrerIvan
Wir sehen uns ggf. im neuen Thread.

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Text in mehreren .docx suchen und ersetzen
gelöst Frage von DerWoWussteMicrosoft Office14 Kommentare

Moin Kollegen. Ich hoffe auf Antworten von Leuten, die genau das per Tool schon mal gemacht haben: Selektiere mehrere ...

Linux Tools
Bash: suchen und ersetzen
Frage von SIPSIPLinux Tools14 Kommentare

Hallo zusammen Möchte aus einer riesigen HTML Datei folgenden Strings ersetzen: ^M\ Nun habe ich dieses kleine Script erstellt, ...

Windows Tools
Suche Programm zum dateien suchen und Ersetzen mit Wildcat Suche
gelöst Frage von sfera-haizaWindows Tools5 Kommentare

Grüßt euch, ich nutze zzT. das Programm InfoRapid Suchen & Ersetzen um HTML / PHP Dateien zu durchsuchen bzw. ...

Batch & Shell
CMD: Suchen, Ersetzen und Hochzählen
gelöst Frage von ralfkauskBatch & Shell3 Kommentare

Hallo zusammen Ich habe folgendes Problem In einer Datei muss ein Wert gefunden, auf Korrektheit geprüft und evtl. ersetzt/geändert ...

Neue Wissensbeiträge
Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 15 StundenBatch & Shell8 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 17 StundenHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server17 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...

Windows 10
Bitlocker nach Verschlüsselung nicht mehr aufrufbar!
gelöst Frage von alexlazaWindows 1013 Kommentare

Hallo, ich besitze ein HP ZBook 17 G4 mit einem Windows 10 Pro Betriebssystem. Bei diesem Problem handelt sich, ...

Batch & Shell
Neuste Datei via PowerShell kopieren
gelöst Frage von kaiuwe28Batch & Shell11 Kommentare

Hallo zusammen, ich hatte mir mit Hilfe der Suche im Forum einen kleinen Code von colinardo rausgesucht und versucht ...