Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Eine Spalte aus einer anderen CSV übernehmen

Frage Entwicklung Batch & Shell

Mitglied: chrislm

chrislm (Level 1) - Jetzt verbinden

07.03.2012, aktualisiert 18.10.2012, 2478 Aufrufe, 14 Kommentare

Hallo
ich bin mit meinen batchdateien soweit durch aber ein kleines Problem habe ich noch.
Eine CSV mit Adresse und geburtsdatum wird versedet und kommt verarbeitet zurück. Leider ist dann das Datum in der empfangenen Datei etwas durcheinander, es fehlen die Jahreszahlen. in der von mir erstellten Datei ist aber das Datum richtig.
Nun suche ich eine Möglichkeit bei der empfangenen Datei das datum aus der 1. Datei zu übernehmen.

Das Datum steht bei beiden in Spalte 8.

nach meinen Versuchen scheint das mit einer Batchdatei unmöglich zu sein. kann man sowas über VBS lösen?
Mitglied: TsukiSan
07.03.2012 um 13:44 Uhr
Hallo chrislm

kann man sowas über VBS lösen?
JA!

Aber wenn du Hilfe hier beantragst, benötigen die Helfenden noch etwas mehr Input, damit der Output nicht kaputt geht

Spass beiseide.
Wenn du beide Dateien als Beispiel hier mal posten könntest, dann schauen wir, was sich machen lässt.

Gruss
Tsuki
Bitte warten ..
Mitglied: it-frosch
07.03.2012 um 13:54 Uhr
Hallo chrislm,

die erste Frage wäre ob du diese Arbeit regelmäßig hast oder ob das im Moment eine einmalige Sache ist.

Bei Regelmäßigkeit wäre ich für evtl. VBS bei Einmaligkeit für den simplen SVERWEIS.

Du liest beide CSV in eine extra Karteikarte ein und verknüpfst die Datumsspalte über SVERWEIS.
Solle auch bei Tausenden von Datensätzen eine Arbeit von ca. 10min sein (Maximal!).

grüße vom it-frosch
Bitte warten ..
Mitglied: chrislm
07.03.2012 um 14:07 Uhr
also die sehen soweit identisch aus, und haben folgenden kopf:
"Nr";"Geschlecht";"Name";"Vorname";"PLZ";"Ort";"Strasse";"GebDat"
Um diese Datei zu erstellen gehe ich so vor:
for /f "tokens=1,16,1-16 delims=;" %%a in (out.txt) do echo %%p;%%c;%%d;%%e;%%f;%%g;%%h;%%i>>fertig.txt

das klappt uach soweit bisauf das Datum worin die Jahreszahlen verscwunden sind. Das ist aber kein Problem da ich die Daten vorher in einer CSV nochmal habe. Deswegen möchte ich gerne das Datum aus der ursprungsdate wieder eingepflegt haben.

So hatte ich mir das gedacht: wenn ich eine for schleife mache aus der datei mit dem richtigen Datum, mache es mit set x% =h%% und baue die 2. for - Schleife mit der out.csv und schreibe dann für h%% einfach von der anderen das x% ins echo......

aber ich weiß nicht wie man es richtig programiert...
Bitte warten ..
Mitglied: chrislm
07.03.2012 um 14:14 Uhr
ich generiere täglich 2- 3 Dateien. früher wurde alles von Hand gemacht und nun, seit ich den Job hier habe, habe ich mir batches erstellt die fast alles von alleine machen. es klappt uach bisauf den schönheitsfehler. die tabellen sind gleich und ich kann die zwar mit copy und past in excel tauschen aber wenn ich es als batch lösen kann wäre das klasse...
Bitte warten ..
Mitglied: TsukiSan
07.03.2012 um 14:23 Uhr
mit copy und past in excel tauschen aber

da würde sich doch der Makrorekorder vom Excel bestens zu eignen. Lass den arbeiten

Gruss
Tsuki
Bitte warten ..
Mitglied: bastla
07.03.2012, aktualisiert 18.10.2012
Bitte warten ..
Mitglied: Pjordorf
07.03.2012 um 14:53 Uhr
Hallo,

Zitat von chrislm:
Eine CSV mit ... wird versedet und kommt verarbeitet zurück. Leider ist dann das Datum in der empfangenen Datei etwas durcheinander, es fehlen die Jahreszahlen.
Warum wird denn etwas an den daten einer Spalte verändert wenn du es nicht willst? Warum kann der verarbeiter nicht die datumswerte belassen? Was genau passiert denn da? Wurde denn die Verarbeitung und deren Folgen (geänderte Feldinhalte) nicht vorher besprochen / festgelegt? Wenn das Datum beim Verarbeiter nur gelesen werden sollte, warum ist es anschließend verändert? Warum sollte ein Geburtsdatum hier geändert (wie oft ändert sich das denn) werden? Das Datum wird ja wohl vom Verarbeiter wenn überhaupt dann nur ausgelesen, oder? Da solltest du ansetzen um erst gar keine unstimmigkeiten aufkommen zu lassen.

Gruß,
Peter
Bitte warten ..
Mitglied: chrislm
07.03.2012 um 15:15 Uhr
da habe ich schon gesucht, aber ich bekomme das Datum nicht richtig dazwischen... denn hinter dem Datum steht noch die Telefonnummer, habe ich oben vergessen in die Kopzeile zu schreiben.
Bitte warten ..
Mitglied: chrislm
07.03.2012 um 15:21 Uhr
also ich bekomme das Datum so zurück : 01.01.0070. es solle je 1970 heißen... überall bei den Jahreszahlen felht mir die 19.
Ich bekomme die daten zurück und hinten drann ist so ein Ampelsystem, diese Ampel baue ich dann in einer neuen CSV nach vorne, erstelle die Datei genau so wie ich sie hingeschickt habe. An den Daten kann ich nicht viel tun, das ist ein externes Unternehmen was die Daten überprüft.
Bitte warten ..
Mitglied: Pjordorf
07.03.2012 um 15:37 Uhr
Hallo,

Zitat von chrislm:
also ich bekomme das Datum so zurück : 01.01.0070. es solle je 1970 heißen... überall bei den Jahreszahlen felht mir die 19.
Ja, und dafür sind aber Zwei nullen zuviel drin. Das Jahr 0070 hat es schon gegeben wenn wir das die Jahreszahl grundsätzlich 4 stellig schreiben. Wenn du als Datumswert ein 01.01.1970 hinschickst und ein 01.01.0070 zurückbekommst, dann ...

An den Daten kann ich nicht viel tun, das ist ein externes Unternehmen was die Daten überprüft.
Zeig mir mal das Unternehmen wo ich ungefragt CSV Dateien hinschicken kann, diese werden be/verarbeitet und ich bekomme diese geänderten Daten dann als CSV wieder zurück. Ihr werdet schon irgendeinen Vertrag oder sonstwas haben was dieses regelt. Und wenn dieses Externe Unternehmen seine Arbeit / Dienstleistung nicht korrekt erfüllt dann .... Nach deiner Aussage ist also dieses Externe Unternehmen Schuld an dein Problem und du hast es wohl auch so nicht mit denen abgesprochen / vereinbart.

Gruß,
Peter
Bitte warten ..
Mitglied: TsukiSan
07.03.2012 um 15:43 Uhr
überall bei den Jahreszahlen felht mir die 19
Wenn es als sicher gilt, dass alle im 20ten Jahundert geboren worden und immer die 00 durch die 19 ersetzt werden soll, dann ist es einfach mit VBS und REPLACE. Man muss nur aufpassen, dass andere Daten - wie Telefonnummern oder Adressen - nicht auch 00 enthalten!

Gruss
Tsuki
Bitte warten ..
Mitglied: chrislm
07.03.2012 um 16:17 Uhr
OK, dann lassen wir das ganze. Dann ist das doch mehr aufwand als die Sache wert ist. Ich lasse die Datei per batch erzeugen, wegschicken und holen. Deswegen ist es schade wenn alles soweit reibungslos funktioniert bisauf die eine kleinigkeit. dort. Oder, ich sende das datum nur mit jahreszahlen, ohne das jahhundert. Dann passt es auch wieder...


Trozdem allen vielen dank an alle die sich meinetwegen das Hirn zermartert haben...
Bitte warten ..
Mitglied: TsukiSan
08.03.2012 um 03:47 Uhr
Hallo chrisIm,

du gibst aber schnell auf

Nein, was wir nur versuchen zu vermitteln ist, dass das Problem bei jemanden liegt, der dir die Daten so verändert, dass du die Arbeit zum Schluss wieder damit hast. Du zerbrichst dir nun den Kopf, wie Du das wieder gerade bügeln kannst.
Von daher haben wir versucht, dir einige einfache und sehr schnelle Möglichkeiten aufzuzeigen.
Man kann deine CSV-Datei auch mit dem Wordpad öffnen, dann Tastenkombination STRG+H eingeben und dann 00 ersetzen durch 19 meinetwegen. Aber eventuell gibt es jemanden, der in dieser Liste nach 2000 geboren worden ist. Dann muss das schon wieder geändert werden.

Also, ich will's gar nicht zu lang machen und dir mal ein Beispiel-Code in VBS zeigen.
Ich habe deine Infos genommen bezüglich Aufbau der CSV-Dateien (vorher/nachher).
Ich gehe davon aus, dass das Geburtstagsdatum immer in der "letzten" Spalte steht!
01.
Dim FSO 
02.
Dim DatenVorher , DatenNachher , DatenZumSchluss 
03.
 
04.
Const CSV_vorher_Datei ="CSV_Before.csv" 
05.
Const CSV_nachher_Datei ="CSV_After.csv" 
06.
Const CSV_zumSchluss_Datei ="CSV_Fertig.csv" 
07.
 
08.
SET FSO = CreateObject("Scripting.FileSystemObject") 
09.
 
10.
DatenVorher = Split(FSO.OpenTextFile(CSV_vorher_Datei).ReadAll,vbcrlf) 
11.
DatenNachher = Split(FSO.OpenTextFile(CSV_nachher_Datei).ReadAll,vbcrlf) 
12.
 
13.
For i = 1 to (Ubound(DatenVorher) - 1) 
14.
	tempV = Split(DatenVorher(i),";") 
15.
	tempN = Split(DatenNachher(i),";") 
16.
	tempN(Ubound(tempN)) = Replace(tempN(Ubound(tempN)),tempN(Ubound(tempN)),tempV(Ubound(tempV))) 
17.
	DatenZumSchluss = DatenZumSchluss & Join(tempN,";") & vbcrlf 
18.
Next 
19.
 
20.
FSO.CreateTextFile(CSV_zumSchluss_Datei).Write DatenZumSchluss 
21.
 
22.
Set FSO = Nothing
Aber Vorsicht!
Der Code funktioiert nur, wenn...... Genau! Da gäbe es noch zu viele Wenn(s) und Aber(s)
Ansonsten könnte es unter Umständen sein, dass jemand an einem anderen Tag Geburtstag hat ganz plötzlich und und und..


Schau es dir mal an und dann überlege dir wirklich, ob es Sinn macht, da selber Geist reinzustecken in dein Vorhaben oder ob es doch nicht besser und einfacher ist, demjenigen auf die Finger zu (sc)hauen, der dir das verbockt

Gruss
Tsuki
Bitte warten ..
Mitglied: it-frosch
10.03.2012 um 14:59 Uhr
Hallo chrislm,

du kannst auch via Makrorecorder und Text in Spalten die 01.01.0070 nach 6 Stellen trennen, die 0070 in eine Zahl umformen und 1900 dazuaddieren.

Das ganze machst du einmal manuell, läßt den Macrorecorder mitlaufen und speicherst das Ganze dann als Makro XY ab.

grüße vom it-frosch
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
VB for Applications
gelöst Excel VBA .csv Import in Tabelle x, ab Spalte y

Frage von drimrim zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...