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

Verschiedene Inhalte an andere Stelle in einer Zeile einer Datei kopieren

Frage Entwicklung Batch & Shell

Mitglied: LFS1993

LFS1993 (Level 1) - Jetzt verbinden

08.12.2010, aktualisiert 18.10.2012, 2463 Aufrufe, 6 Kommentare

Hallo zusammen!

Da stehe ich also wieder mal vor einem großen Problem und habe nicht die geringste Ahnung, wie ich so etwas bewerkstelligen kann...

Hier mal mein Problem:

Ich habe mehrere Dateien mit etlichen Zeilen, diese variieren ständig, also keine gleichen Werte.
Das sieht in den Zeilen in etwa so aus:

,,"Text1",,,,,,,,,"Text2.txt",,"Text3",,,,,,,,,,,,,,

Was an den Zeilen der Datei gleich ist, die zu editieren sind, sind die beiden Kommas vor dem Eintrag, nur diese sollen angefaßt werden, denn es kommen auch Zeilen dieser Art vor, die schon stimmen und in dem Format sind, was benötigt wird:

"Text11",,"Text11",,,,,,,,,"Text21.txt",,"Text31",,,,,,,,,,,,,,

Ich suche also ein Script, was mir in den Zeilen, die mit zwei Kommas beginnen, den Inhalt hinter dem zweiten Komma in und mit den angegebenen Hochkommas vor das erste Komma der Zeile setzt.

Die Lösung meiner Problemzeile sollte dann also so aussehen:

"Text1",,"Text1",,,,,,,,,"Text2.txt",,"Text3",,,,,,,,,,,,,,

Für eure Hilfe danke ich schonmal im Voraus, wäre wirklich SUPER wenn mir da geholfen werden könnte, denn ich steh in dieser Sache leider ein klein wenig unter Zeitdruck und kann diverse Dateien nicht händisch editieren. Variablen und die Erstellung von BAT-Scripts sind mir nach wie vor ein Rätsel, leider...

VIELEN DANK ALSO IM VORAUS!

Gruß, LFS1993
Mitglied: 60730
08.12.2010, aktualisiert 18.10.2012
moin,

ich schreibe hier keine fertigen Scripte mehr - ich gebe nur noch Tipps zum selberdraufkommen - wenig unter Zeitdruck stehen wir alle irgendwie...

Was an den Zeilen der Datei gleich ist, die zu editieren sind, sind die beiden Kommas vor
  • findstr "^,,^" "datei" liefert alle Zeilen, von datei die mit zwei ,, beginnen
  • mit "for" kann man eine Schleife bauen, die "datei" findet - oder auch die Wert hinter den kommatas auslesen.

Dazu gibt es eine nette ausführliche Anleitung - wäre schade, wenn die umsonst geschrieben worden wäre.

Gruß
Bitte warten ..
Mitglied: Biber
08.12.2010 um 13:13 Uhr
Moin LFS1993,

vielleicht ist diese Anforderung ja geeignet, dir die letzten größen Rätsel der Menschheit etwas auf- oder zumindest anzudröseln.

Lösungsstrategie & Stolpersteine:
a) mit FINDSTR.exe und Parameter /B findest du alle Zeilen mit einem Doppelkomma am Zeilenanfang
b) Stolperstein: die FOR/F-Anweisung zählt "leere" Tokens, also nicht angedeutete Elemente zwischen zwei komma-trennern nicht als vorhandene Elemente mit.
Also muss zuerst aus einer Liste mit Leerelementen eine Liste ohne Leerelemente erzeugen. Zum beispiel durch Einfügen eines Dummy-Platzhalter wie "@ " für "nix da".

Beispiel am CMD-Prompt:
Demo für Teil a)
>findstr /b ",," "Y:\Eigene dateien\LFS1993.txt" 
,,"Text1",,,,,,,,,"Text2.txt",,"Text3",,,,,,,,,,,,,,
für Fall b)
# wenn ich versuche, die gedanklich durchnummerierten Tokens abzufischen -> geht schief bei Leerelementen 
>for /f "delims=, tokens=1,2,* " %i in ('findstr /b ",," "Y:Eigene dateien\LFS1993.txt"') do @echo [%i][%j][%k] 
["Text1"]["Text2.txt"]["Text3",,,,,,,,,,,,,,] 
# vergleiche mit dem Original-String von oben -- doesnt fit. 
 
# also erstmal eine Nicht-leere-Liste zusammenbraten: 
>for /f "delims=" %i in ('findstr /b ",," "Y:Eigene dateien\LFS1993.txt"') do @set "line=%i" & echo !line:,,=,@,! 
,@,"Text1",@,,@,,@,,@,,"Text2.txt",@,"Text3",@,,@,,@,,@,,@,,@,,@, 
# Nach einmaligem Ersetzen aller Doppelkomma durch "@, @" sind NICHT alle ersetzt.... das ist eben so implementiert von den Redmonder Pfannkuchengesichtern  
# also nochmal dasselbe drüberschrubbeln ->2 oder 3x ein SET wie in nächster Zeile 
set "line=%line:,,=,@,%" 
## --> dann habe ich eine Zeile, die im Falle der zu behandelnden Sätze mit Doppelkomma am Zeilenanfang so aussieht 
>set line 
line=,@,"Text1",@,@,@,@,@,@,@,@,"Text2.txt",@,"Text3",@,@,@,@,@,@,@,@,@,@,@,@,@, 
## beginnt mit einem Komma, das erse oken ist ein "@", das 2. Token ist "Text1", usw... 
## JETZT erst kann ich sinnvoll drübelwackelen mit einer FOR /F-Amweisung mit abgezählten Tokens 
## und kann es so umsortieren wie nötig. 
>for /F "delims=, tokens=1,2,*" %i in ("%line%") do @echo 1[%i] 2[%j] 3[%k] 
1[@] 2["Text1"] 3[@,@,@,@,@,@,@,@,"Text2.txt",@,"Text3",@,@,@,@,@,@,@,@,@,@,@,@,@,] 
 
(=13:10:35  D:\temp=) 
>for /F "delims=, tokens=1,2,*" %i in ("%line%") do @echo 2[%j] 1[%i] 3[%k] 
2["Text1"] 1[@] 3[@,@,@,@,@,@,@,@,"Text2.txt",@,"Text3",@,@,@,@,@,@,@,@,@,@,@,@,@,]
Soweit ein paar Vorüberlegungen.
Magst du mal versuchen, das in eine Handvoll Batch-Zeilen zu giessen?

Grüße
Biber
Bitte warten ..
Mitglied: LFS1993
08.12.2010 um 13:20 Uhr
Hallo.

Tja, ich verstehe iegtnlich gelinde gesagt nur noch Bahnhof, ist mir wirklich zu hoch, bin einfach nicht geeignet dafür...

Ich kann das nicht in ein Batch giessen, weil ich den Ansatz noch nicht mal verstanden habe, Variablen und "for" sind mir absoulte Rätsel, leider!

Werde mich dann wohl oder übel doch an die händische Editiererei machen müssen befürchte ich...

Merci, LFS1993
Bitte warten ..
Mitglied: Biber
08.12.2010 um 13:41 Uhr
Moin LFS1993,

es gibt niemand, für den Batches "zu hoch" sein könnten.... der Befehlsumfang von Batch ist noch kleiner als der Sprachschatz von Daniela Katzenberger oder Paris Hilton
Ich kann es verstehen, wenn du vor einem rhetorischen Schlagabtausch mit diesen Blondchen Abstand nimmst, aber bei dem büschen Batchgewurstel lass ich ein frühzeitiges Verpissen eigentlich nicht gelten.

Spiel doch einfach mal die CMD-Demozeilen mit deiner Daten-Datei durch, dann sollte das eine ohne andere klarer und greifbarer werden.

Und was FOR und Tokens betrifft: folge T-Mos Link.

Grüße
Biber
Bitte warten ..
Mitglied: LFS1993
08.12.2010 um 15:55 Uhr
Hi Biber.

Ja, ich versuche mich gern an dem Batch, doch da hab ich auch schon das nächste Problem, was aus meiner anfänglichen Frage vielleicht nicht klar hervorging:

Die Inhalte von "Text1" , also zwischen den Hochkommas, variiert ständig, weshalb da wohl Variablen zum Einsatz kommen müßten...
Das kapier ich nun endgültig nicht mehr!

Tja, und genau damit steh ich nun absolut auf der Leitung...

Gruß,

LFS1993
Bitte warten ..
Mitglied: Biber
09.12.2010 um 18:30 Uhr
Moin LFS1993,

also, noch mal ganz in Ruhe...

Lass uns bitte noch mal hier anfangen, als du schriebst

Da stehe ich also wieder mal vor einem großen Problem
und habe nicht die geringste Ahnung, wie ich so etwas bewerkstelligen kann...
Ich habe mehrere Dateien mit etlichen Zeilen, diese variieren ständig, also keine gleichen Werte.
Okay, das bedeutet dich schon mal, dass die Menschen, die dir diese Datei geschickt haben, dich für die Verarbeitung komplexer Sachverhalte befähigt halten.
Sonst hätten sie ja immer gleiche Zeilen geschickt - 27 Mio, und du hättest erst im Herbst 2028 Verdacht geschöpft.

Das sieht in den Zeilen in etwa so aus:

,,"Text1",,,,,,,,,"Text2.txt",,"Text3",,,,,,,,,,,,,,

Was an den Zeilen der Datei gleich ist, die zu editieren sind, sind die beiden Kommas vor dem Eintrag, nur diese sollen angefaßt werden,
denn es kommen auch Zeilen dieser Art vor, die schon stimmen und in dem Format sind, was benötigt wird:

"Text11",,"Text11",,,,,,,,,"Text21.txt",,"Text31",,,,,,,,,,,,,,

Hier wird es für mich unklar.
a) Warum bekommst du CSV-Dateien zur maschinellen Weiterverarbeitung, bei denen das Schlüsselfeld auf Position 1 leer sein kann?
b) und wieso lässt sich für dich in diesem Feld das dritte Feld genausogut wie Feld 1 verwerten?? Merkwürdige Daten...
c) Hast du denn keine Chancen, "vernünftige" Daten geliefert zu bekommen, wenn du nett fragst?

Nachbearbeitung im Sinne von Formatumwandlung einzelner Felder ist für mich ja okay.
Aber eine Manipulation der Quelldaten von "Och, wenn Schlüsselfeld1 leer ist, dann sag ich mal, der Schlüssel ist jetzt Feld 3"...das ist für mich schon grenzwertig.
Du kannst hinterher nicht mehr erkenn, welche Daten du verarbeitet hast wie geliefert und welche Daten du "hingebogen" hast.

Außerdem ... du kannst sio natürlich auch doppelte (dreifache.... x-fache ) Datensätze bekommen mit immer dem gleichen Wert in Spalte 1.

Unabhängig von diesen Überlegungen:

Diese Bedenken hier:
Die Inhalte von "Text1" , also zwischen den Hochkommas, variiert ständig, weshalb da wohl Variablen zum Einsatz kommen müßten...
.... kann ich (noch) nicht so recht teilen.

Ein Batch würde möglicherweise das ungeeignete Werkzeug sein, wenn alle Zeilen unterschiedlich viele Trenner hätten.
Aber ob nun zweischen den Trennern/den Kommas ein einzelnes Wort in Anführungszeichen steht oder deren Stücker acht.... what shalls.

Lässt sich denn so eine CSV-Datei bei dir nicht einfach mit einem Excel/einem OpenOffice-Calc doppelklicköffnen?

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Linux
Script um Zeilen aus einer Datei an eine bestimmte Stelle in einer anderen Datei zu kopieren
Frage von grepper91Linux2 Kommentare

Hallo zusammen, ich habe folgendes Problem, ich habe Paketlisten die ungefähr so aussehen: ;Paket1;x86_64;;;# ;Paket2;x86_64;;;# ;Paket3;x86_64;;;# Nun habe ich ...

Batch & Shell
Zeile von einer Bat-Datei in eine andere kopieren
gelöst Frage von Nick.BBatch & Shell6 Kommentare

Ich wollte eine Zeile von einer Bat-Datei in eine andere schreiben, dies habe ich auch mit echo geschafft aber ...

PHP
String zerlegen an verschieden Stellen
Frage von ppmk22PHP3 Kommentare

ich noch mal Ich habe verschieden Strings die immer 200 Zeichen lang sind. Diesen möchte ich an bestimmten stellen ...

Batch & Shell
Intellisense in Powergui - Inhalte verschieden
gelöst Frage von lupus1Batch & Shell4 Kommentare

Auf zwei verschiedenen Rechnern sind Powershell und Powergui installiert. Wird z.B. das Commandlet "Get-ChildItem -force" eingegeben und bei "force" ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 9 StundenWindows 101 Kommentar

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 11 StundenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet3 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 1 TagDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte16 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...

Windows Server
GPO nur für bestimmte Computer
Frage von Leo-leWindows Server12 Kommentare

Hallo Forum, gern würde ich ein Robocopy script per Bat an eine GPO hängen. Wichtig wäre aber dort der ...

Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server12 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...

Netzwerkgrundlagen
Laufwerkszuordnung mit zwei IPs
Frage von Alex29Netzwerkgrundlagen11 Kommentare

Hallo in die Runde, Ich als Hobbyadmin hätte mal wieder eine Frage an die Profis. Ich habe ein Netzwerk ...