Zeichen an eine CSV Datei anhängen
Hallo zusammen,
nachdem ich mich fast tot gesucht habe nach einer Lösung, muss ich jetzt doch anderen Menschen auf den Keks gehen und hoffen das sie mehr davon verstehen als ich, was vermutlich nicht schwer ist
Ich habe 3 .csv Dateien die am Anfang alle gleich heißen nämlich GLS_GEPARD_*.csv an diese .csv Dateien muss ich einfach nur ;1 anhängen und an einen anderen Ort verschieben. Aber Wie??
Ich hoffe Ihr könnt mir helfen!
P.s.: die Dateien sind ; getrennt und es wäre das 16. Feld wo die Info rein muss.
nachdem ich mich fast tot gesucht habe nach einer Lösung, muss ich jetzt doch anderen Menschen auf den Keks gehen und hoffen das sie mehr davon verstehen als ich, was vermutlich nicht schwer ist
Ich habe 3 .csv Dateien die am Anfang alle gleich heißen nämlich GLS_GEPARD_*.csv an diese .csv Dateien muss ich einfach nur ;1 anhängen und an einen anderen Ort verschieben. Aber Wie??
Ich hoffe Ihr könnt mir helfen!
P.s.: die Dateien sind ; getrennt und es wäre das 16. Feld wo die Info rein muss.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 195475
Url: https://administrator.de/forum/zeichen-an-eine-csv-datei-anhaengen-195475.html
Ausgedruckt am: 23.12.2024 um 01:12 Uhr
32 Kommentare
Neuester Kommentar
Moin E.Wind,
willkommen im Forum.
Wenn es eine einmalige Aktion ist, begib dich an den CMD-Prompt und gibt dreimal leicht variiert ein:
Die kleine Variation ist jeweils die Änderung der GLS_GEPARDxxx und der NeuerName001.csv.
GGf musst du noch ein "CHCP 1252" vorwegschicken, falls die .csv-Dateien Windows-ANSI-Umlaute enthalten.
Grüße
Biber
willkommen im Forum.
Wenn es eine einmalige Aktion ist, begib dich an den CMD-Prompt und gibt dreimal leicht variiert ein:
C:\Users\Biber>For /f "usebackq delims=" %i in ("X:\y\z\GLS_GEPARD001.csv") do @echo %i;1>>D:\NeuerPfad\NeuerName001.csv
Die kleine Variation ist jeweils die Änderung der GLS_GEPARDxxx und der NeuerName001.csv.
GGf musst du noch ein "CHCP 1252" vorwegschicken, falls die .csv-Dateien Windows-ANSI-Umlaute enthalten.
Grüße
Biber
Hallo,
Batchdateien speichern und mehrmals benutzen?
Gruß,
Peter
Batchdateien speichern und mehrmals benutzen?
damit die GLS Software weiß auf welcher Arbeitsstation bzw. auf welchem Drucker das Paketlable gedruckt werden soll.
Jeweils eine Batchdatei für einen Mandanten nehmen ist zwar unschön (im Sinne von Batchpuristen) aber löst dein Problem, oder? Dein Quelldateiname "GLS_GEPARD_Mandant3_*.csv" ist doch schon eindeutig und in jeweils einer eigenen Batchdatei leicht zu verwenden.Gruß,
Peter
Hallo,
[Änderung nach Kommentare vom TO]
Du wunderst dich warum so wenig hier passiert? Ganz einfach, deine Frage bis jetzt war ja nichts besonderes und hier im Forum schon hundertemal durchexerziert.Und jetzt immer wieder diese "ach so - da kommt" noch und dann dein "das brauche ich auch noch" kann hier schon keiner mehr Lesen. Warum nicht am Anfang das sagen was hier jemand braucht um DEIN Problem zu verstehen und dir vielleicht einen Ansatz oder gar eine Lösung bieten zu können?
Jetztauf einmal das Zeichen für den Rechner? Gestern war es noch nur das zeichen für den Mandant!
Und was hälst du davon dir einen Programmier anzuschaffen der dir gegen einer entsprechenden Bezahlung dir deine Wünsche und alle anschließenden Änderung dir Programmiert? Dem kannst du dann immer wieder mit nachträge kommen und er kann dir dann immer wieder nachträglich neue Rechnungen schreiben. Was soll das hier?
Unter diesen gegebenheiten verzichte ich drauf.
Gruß,
Peter
PS. Hättest du (hast du aber nicht) von vornherein hier alles auf den Tisch gelegt, hättest du vermutlich schon eine lauffähige Lösunge erhalten.
[/Änderung]
[Änderung nach Kommentare vom TO]
Du wunderst dich warum so wenig hier passiert? Ganz einfach, deine Frage bis jetzt war ja nichts besonderes und hier im Forum schon hundertemal durchexerziert.
das ganze im Hintergrund laufen lassen muss also Quasi endlos.
Aha, batchdatei im Hintergrund und das dann auch noch endlos. Aha. So eine dicke CPU gibt es nicht was das kann. 100% systemauslast.Grundsätzlich muss die Datei auf 3+ Rechnern ausgeführt
Auch hier werden sich andere Fragen, "Was soll das denn jetzt? Eine Batch auf 3+ Rechner welche alle die gleiche Dateien bearbeiten?"dann muss die Batch das Zeichen für den jeweiligen Rechner anhängen
Jetzt
deshalb NICHT 3 Dateien im Hintergrund haben die Prüfen, Anfügen etc. sondern eine die alles macht.
Danke für Die Hilfe!
Gruß,
Peter
[/Änderung]
Hallo Eric,
ich kann mich Pjordorf nur anschliessen (hilft nicht direkt, bei deiner Problemlösung).
Hier im Forum gibt es viele kluge Köpfe, die bei richtiger Fragestellung schon einen (mindestens) lauffähigen Ansatz geliefert hätten können.
Die hast du jetzt aber schon sehr verwirrt.
Bitte daran denken, dass alle sich im Moment auch mit dem "Was kaufe ich zu Weihnachten" auseinander setzen und die Köpfe eh schon rauchen
Also ich würde mal vorschlagen, du beschreibst dein Vorhaben nochmal ganz ganz ganz genau und eventuell kommen die richtigen Ansätze dann.
Gruss
Tsuki
ich kann mich Pjordorf nur anschliessen (hilft nicht direkt, bei deiner Problemlösung).
Hier im Forum gibt es viele kluge Köpfe, die bei richtiger Fragestellung schon einen (mindestens) lauffähigen Ansatz geliefert hätten können.
Die hast du jetzt aber schon sehr verwirrt.
Bitte daran denken, dass alle sich im Moment auch mit dem "Was kaufe ich zu Weihnachten" auseinander setzen und die Köpfe eh schon rauchen
Also ich würde mal vorschlagen, du beschreibst dein Vorhaben nochmal ganz ganz ganz genau und eventuell kommen die richtigen Ansätze dann.
Gruss
Tsuki
Hallo Eric,
vermutlich wird's mit Batch etwas "resourcenunfreundlich"!
Du musst dir da wirklich was anderes überlegen.
Mit VBS könnte man etwas tricksen, indem man dem Script immer "Ruhepausen" verpasst.
Zum allgemeinen Verständnis:
1) 3 Rechner
2) in einem bestimmten Pfad wird unter bestimmten Voraussetzungen eine Datei angelegt
3) Diese soll einen Index bekommen: Im Dateinamen oder am Ende in der Datei?
4) Dann soll diese Datei - falls erstellt - irgendwo hinkopiert werden und auf dem Originalrechner gelöscht werden?
Gruss
Tsuki
vermutlich wird's mit Batch etwas "resourcenunfreundlich"!
Du musst dir da wirklich was anderes überlegen.
Mit VBS könnte man etwas tricksen, indem man dem Script immer "Ruhepausen" verpasst.
Zum allgemeinen Verständnis:
1) 3 Rechner
2) in einem bestimmten Pfad wird unter bestimmten Voraussetzungen eine Datei angelegt
3) Diese soll einen Index bekommen: Im Dateinamen oder am Ende in der Datei?
4) Dann soll diese Datei - falls erstellt - irgendwo hinkopiert werden und auf dem Originalrechner gelöscht werden?
Gruss
Tsuki
Hallo Eric,
ich könnte mir das in VBS grob so vorstellen, zu lösen:
Dieses VBS-Script läuft ständig und legt eine 10-sekündige Pause nach jedem Durchlauf ein (Wscript.Sleep 10000[ms]). Es sucht im Originalpfad nach einer Datei, welche im Anfang die besagte Benamung hat (DateiFragment = "GLS_GEPARD_Mandant") und wenn dem so ist, diese Datei am Ende die Nummer vom Rechner (auf welchem der Script gerade ausgeführt wird -> muss man händisch ins Script schreiben!) anfügt, dann nach AblageDatei kopiert und zum Schluss umbenennt nach DONE. Das kann man noch klären, was genau da passieren soll.
soweit erst einmal. Schau mal, ob das in deine Richtung geht, was du umsetzen möchtest.
Gruss
Tsuki
[Edit]
Zeile28 geändert
von: FSO.MoveFile Pfadangabe , OriginalPfad & "Done"
nach: FSO.DeleteFile(Pfadangabe)
Zeile11 angepasst (verkürzt)
Zeile23 angepasst -> >0 anstelle von >1
[/Edit]
ich könnte mir das in VBS grob so vorstellen, zu lösen:
Dim FSO, Ordner
Dim OriginalPfad, Rennt1
Dim DateiFragment
Dim Starter
Dim RechnerNummer
set FSO = createobject("Scripting.FileSystemObject")
OriginalPfad = "C:\Polling\Export\"
AblageDatei = "C:\Polling\"
DateiFragment = "GLS_GEPARD"
RechnerNummer = 1 ' hier die Nummer für jeden Rechner anpassen
Set Ordner = FSO.GetFolder(OriginalPfad)
Starter = 1
Do While Starter = 1
For Each File In Ordner.Files
Pfadangabe = File.Path
temp = Split(Pfadangabe,DateiFragment)
If Ubound(temp) > 0 then
Set MeineDatei = FSO.OpenTextFile(Pfadangabe, 8)
MeineDatei.WriteLine (RechnerNummer)
MeineDatei.close
FSO.CopyFile Pfadangabe, AblageDatei, True
FSO.DeleteFile(Pfadangabe)
End If
Next
Wscript.Sleep 10000
Loop
Dieses VBS-Script läuft ständig und legt eine 10-sekündige Pause nach jedem Durchlauf ein (Wscript.Sleep 10000[ms]). Es sucht im Originalpfad nach einer Datei, welche im Anfang die besagte Benamung hat (DateiFragment = "GLS_GEPARD_Mandant") und wenn dem so ist, diese Datei am Ende die Nummer vom Rechner (auf welchem der Script gerade ausgeführt wird -> muss man händisch ins Script schreiben!) anfügt, dann nach AblageDatei kopiert und zum Schluss umbenennt nach DONE. Das kann man noch klären, was genau da passieren soll.
soweit erst einmal. Schau mal, ob das in deine Richtung geht, was du umsetzen möchtest.
Gruss
Tsuki
[Edit]
Zeile28 geändert
von: FSO.MoveFile Pfadangabe , OriginalPfad & "Done"
nach: FSO.DeleteFile(Pfadangabe)
Zeile11 angepasst (verkürzt)
Zeile23 angepasst -> >0 anstelle von >1
[/Edit]
Hallo Eric,
also wenn die Datei dann weg kann, dann müsste obiges Script schon ziemlich gut für dich arbeiten können.
Dann sollte Zeile 28 oben durch
ersetzt werden.
Probier mal auf einem Rechner mit Testdateien und gib mal den aktuellen Stand durch, was noch nicht an dem Script passt.
Gruss
Tsuki
also wenn die Datei dann weg kann, dann müsste obiges Script schon ziemlich gut für dich arbeiten können.
Dann sollte Zeile 28 oben durch
FSO.DeleteFile(Pfadangabe)
Probier mal auf einem Rechner mit Testdateien und gib mal den aktuellen Stand durch, was noch nicht an dem Script passt.
Gruss
Tsuki
Hallo Eric,
ist ok!
Ich hatte zwischenzeitlich mir mal die besagten Ordner und mal 2 Testdateien mit irgendwelchen Namen/Nummern - ausser den ersten stellen - kreiert und das Script wie oben (angepasst!) mal laufen lassen. Es hat soweit funktioniert bei mir (WinXP SP3 deu). Jedesmal, wenn ich die Dateien zurückverschoben habe nach C:\Polling\Export dann sind nach 10 Sekunden beide Dateien wieder kopiert worden nach C:\Polling mit jedesmal dem Index des PCs (simuliert) am Ende der Datei.
Probier das morgen mal aus, wenn du Zeit hast und gib mal Feedback.
Schönes Adventwochenende und viele Grüsse
Tsuki
ist ok!
Ich hatte zwischenzeitlich mir mal die besagten Ordner und mal 2 Testdateien mit irgendwelchen Namen/Nummern - ausser den ersten stellen - kreiert und das Script wie oben (angepasst!) mal laufen lassen. Es hat soweit funktioniert bei mir (WinXP SP3 deu). Jedesmal, wenn ich die Dateien zurückverschoben habe nach C:\Polling\Export dann sind nach 10 Sekunden beide Dateien wieder kopiert worden nach C:\Polling mit jedesmal dem Index des PCs (simuliert) am Ende der Datei.
Probier das morgen mal aus, wenn du Zeit hast und gib mal Feedback.
Schönes Adventwochenende und viele Grüsse
Tsuki
Hallo Eric,
dann probier mal dieses Script hier:
Das hängt in der - !Achtung! - vorletzten Zeile die Rechnernummer an.
Passt die Zeile, an der hinten angehangen wird, jetzt?
Wenn nicht , wo wird angehangen?
Gruss
Tsuki
Ps.: bitte nicht anbeten
dann probier mal dieses Script hier:
Dim FSO, Ordner
Dim OriginalPfad, Rennt1
Dim DateiFragment
Dim Starter
Dim RechnerNummer
set FSO = createobject("Scripting.FileSystemObject")
OriginalPfad = "C:\Polling\Export\"
AblageDatei = "C:\Polling\"
DateiFragment = "GLS_GEPARD"
RechnerNummer = 1 ' hier die Nummer für jeden Rechner anpassen
Set Ordner = FSO.GetFolder(OriginalPfad)
Starter = 1
Do While Starter = 1
For Each File In Ordner.Files
Pfadangabe = File.Path
temp = Split(Pfadangabe,DateiFragment)
If Ubound(temp) > 0 then
TempData = Split(FSO.OpenTextFile(Pfadangabe, 1).ReadAll, vbCrLf)
TempData(Ubound(TempData)-1) = TempData(Ubound(TempData)-1) & ";" & RechnerNummer
FSO.CreateTextFile (Pfadangabe).Write (Join(TempData,vbcrlf))
FSO.CopyFile Pfadangabe, AblageDatei, True
FSO.DeleteFile(Pfadangabe)
End If
Next
Wscript.Sleep 10000
Loop
Das hängt in der - !Achtung! - vorletzten Zeile die Rechnernummer an.
Passt die Zeile, an der hinten angehangen wird, jetzt?
Wenn nicht , wo wird angehangen?
Gruss
Tsuki
Ps.: bitte nicht anbeten
Hallo E.Wind und Tsuki!
Es wäre vermutlich sinnvoll, vorweg alle Sonderzeichen in der gesamten Datei passend zu ersetzen - hatten wir (relativ umfangreich) zB hier schon mal ...
Grüße
bastla
Es wäre vermutlich sinnvoll, vorweg alle Sonderzeichen in der gesamten Datei passend zu ersetzen - hatten wir (relativ umfangreich) zB hier schon mal ...
Grüße
bastla
Hallo Eric, hallo bastla,
ich habe das Problem, dass ich Eric's Problem nicht nachvollziehen kann bei mir, auch wenn ich Umlaute oder asiatische Shriftzeichen etc. in eine Beispieldatei bei mir einfüge, werden diese beim Aufrufen meines Scriptes nicht verändert. Soll heissen, ich bekomme das beschriebene Problem nicht.
Wenn allerdings - wie von bastla angedeutet - die Dateien bei euch eintreffen aus einem anderen Land mit anderem Schriftsatz und ihr dann Probleme habt, diese bei euch einzulesen, dann müsste man entweder überlegen, ob nicht auf allen PCs die ihr in Deutschland und eventuell weltweit einsetzt, die gleichen Schriftsätze draufkommen oder wir integrieren bastlas Script .
Aber dann würde ich dazu tendieren, eine neue Frage aufzumachen.
Viele Grüsse
Tsuki
ich habe das Problem, dass ich Eric's Problem nicht nachvollziehen kann bei mir, auch wenn ich Umlaute oder asiatische Shriftzeichen etc. in eine Beispieldatei bei mir einfüge, werden diese beim Aufrufen meines Scriptes nicht verändert. Soll heissen, ich bekomme das beschriebene Problem nicht.
Wenn allerdings - wie von bastla angedeutet - die Dateien bei euch eintreffen aus einem anderen Land mit anderem Schriftsatz und ihr dann Probleme habt, diese bei euch einzulesen, dann müsste man entweder überlegen, ob nicht auf allen PCs die ihr in Deutschland und eventuell weltweit einsetzt, die gleichen Schriftsätze draufkommen oder wir integrieren bastlas Script .
Aber dann würde ich dazu tendieren, eine neue Frage aufzumachen.
Viele Grüsse
Tsuki
Hallo Tsuki!
Das Problem mit den genannten Sonderzeichen ist, dass sie mit dem Semikolon ein (zusätzliches) Trennzeichen enthalten, wodurch das Aufteilen der Zeile nicht mehr richtig erfolgt.
Ob gleich mit so großen Kanonen wie im verlinkten Script geschossen werden muss, oder eine Schleife der Art
genügt, hängt von den zu erwartenden Daten ab - inklusive Zeichen mit Akzenten kann das aber eine ganz ordentliche Liste ergeben (siehe (SELF)HTML-Zeichenreferenz) ...
Grüße
bastla
Das Problem mit den genannten Sonderzeichen ist, dass sie mit dem Semikolon ein (zusätzliches) Trennzeichen enthalten, wodurch das Aufteilen der Zeile nicht mehr richtig erfolgt.
Ob gleich mit so großen Kanonen wie im verlinkten Script geschossen werden muss, oder eine Schleife der Art
Alt = Array("&", "Ä", "ä", "...")
Neu = Array("&", "Ä", "ä", "...")
TempData = Split(FSO.OpenTextFile(Pfadangabe).ReadAll, vbCrLf)
For i = 0 To UBound(Alt)
TempData = Replace(TempData, Alt(i), Neu(i))
Next
Grüße
bastla
Moin bastla,
aha, jetzt dämmerts mir etwas. Danke!
Na dann schauen wir mal, was Eric meint.
Deine Zeilen sind schnell eingfügt. Ansonsten - wenn es denn tatsächlich ganz viele Zeichesätze geben würde - dann lieber mit einer Liste als Datei und das ganze ersetzen. Sieht dann scriptmässig besser aus.
Viele Grüsse
Tsuki
aha, jetzt dämmerts mir etwas. Danke!
Na dann schauen wir mal, was Eric meint.
Deine Zeilen sind schnell eingfügt. Ansonsten - wenn es denn tatsächlich ganz viele Zeichesätze geben würde - dann lieber mit einer Liste als Datei und das ganze ersetzen. Sieht dann scriptmässig besser aus.
Viele Grüsse
Tsuki
Hallo Eric,
ich habe bastlas Zeilen mit eingebaut in der Hoffnung, dass es sich um dieses Problem bei dir handelt.
Die Zeilen 14 und 15 musst du ggf. anpassen.
Wenn es zu viele Sonderzeichen gibt, die man ersetzen muss, dann sieht das Script nicht mehr schön aus. In diesem Falle würde ich zu einer Datei tendieren, in der alle Sonderzeichen und deren Ersetzungszeichen stehen, die man am Anfang einmal einliest.
Hier das Script mit Ersetzen (Replace)
Schönen 2ten Advent und viele Grüsse
Axel
ich habe bastlas Zeilen mit eingebaut in der Hoffnung, dass es sich um dieses Problem bei dir handelt.
Die Zeilen 14 und 15 musst du ggf. anpassen.
Wenn es zu viele Sonderzeichen gibt, die man ersetzen muss, dann sieht das Script nicht mehr schön aus. In diesem Falle würde ich zu einer Datei tendieren, in der alle Sonderzeichen und deren Ersetzungszeichen stehen, die man am Anfang einmal einliest.
Hier das Script mit Ersetzen (Replace)
Dim FSO, Ordner
Dim OriginalPfad
Dim DateiFragment
Dim Starter
Dim RechnerNummer
set FSO = createobject("Scripting.FileSystemObject")
OriginalPfad = "C:\Polling\Export\"
AblageDatei = "C:\Polling\"
DateiFragment = "GLS_GEPARD"
RechnerNummer = 1 ' hier die Nummer für jeden Rechner anpassen
FremdeZeichen = Array("&", "Ä", "ä", "...")
ErsetzungsZeichen = Array("&", "Ä", "ä", "...")
Set Ordner = FSO.GetFolder(OriginalPfad)
Starter = 1
Do While Starter = 1
For Each File In Ordner.Files
Pfadangabe = File.Path
temp = Split(Pfadangabe,DateiFragment)
If Ubound(temp) > 0 then
TempData = FSO.OpenTextFile(Pfadangabe, 1).ReadAll
For i = 0 to Ubound(FremdeZeichen)
TempData = Replace(TempData,FremdeZeichen(i),ErsetzungsZeichen(i))
Next
TempData = Split(TempData, vbCrLf)
TempData(Ubound(TempData)-1) = TempData(Ubound(TempData)-1) & ";" & RechnerNummer
FSO.CreateTextFile (Pfadangabe).Write (Join(TempData,vbcrlf))
FSO.CopyFile Pfadangabe, AblageDatei, True
FSO.DeleteFile(Pfadangabe)
End If
Next
Wscript.Sleep 10000
Loop
Schönen 2ten Advent und viele Grüsse
Axel
Hallo Eric,
schaue dir hierzu die Zeilen 14 und 15 vom obigen Script an.
Diese beide Zeilen musst du dir anpassen.
Beispiel:
Du willst als &
Du willst ü als ü
Einfach in der Zeile 14 das HTML-Codierte-Zeichen eingeben in Gänsefüsschen und durch Komma trennen und darunter in Zeile 15 in Gänsefüsschen das normale Schriftzeichen eingeben.
Dann werden diese im obigen Script gesucht und ggf. ersetzt.
Gruss
Tsuki
Eine Frage noch für mich, muss ich nicht suchen und ersetzen wenn > ich & bzw. ü für ü?
schaue dir hierzu die Zeilen 14 und 15 vom obigen Script an.
Diese beide Zeilen musst du dir anpassen.
Beispiel:
Du willst als &
Du willst ü als ü
FremdeZeichen = Array(" ", "ü")
ErsetzungsZeichen = Array("&","ü")
Dann werden diese im obigen Script gesucht und ggf. ersetzt.
Gruss
Tsuki