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

In CSV Datei nur in einer Spalte Suchen, Ersetzen per Batch

Frage Entwicklung Batch & Shell

Mitglied: eimer24

eimer24 (Level 1) - Jetzt verbinden

16.01.2013 um 15:54 Uhr, 3953 Aufrufe, 18 Kommentare

Hallo,

Habe eine CSV mit Artikeldaten wo Spalte 21 den Lagerbestand enthält mit YES NO und LOW gekennzeichnet ist.
Für den Automatischen Import benötigen wir aber Zahlen. Also sollen die Buchstaben mit Zahlen ersetzt werden.

Habe nun bereits folgende Batch Datei:

01.
@ECHO off 
02.
SETLOCAL enabledelayedexpansion 
03.
 
04.
REM Testprogramm zum Aendern von "" in " 
05.
 
06.
SET quelle=C:\download\products.csv 
07.
SET ziel= C:\import\export.csv 
08.
 
09.
IF EXIST %ziel% DEL /f %ziel%  
10.
 
11.
FOR /f "delims=" %%i IN ('FINDSTR . %quelle%') DO ( 
12.
SET ganze_zeile=%%i 
13.
SET ganze_zeile=!ganze_zeile:YES=99! 
14.
SET ganze_zeile=!ganze_zeile:NO=0! 
15.
SET ganze_zeile=!ganze_zeile:LOW=10! 
16.
ECHO !ganze_zeile! 
17.
ECHO !ganze_zeile! >> %ziel% 
18.
)

jetz habe ich nur das Problem das so alle Buchstaben der Kompletten CSV geändert werden.
Es soll aber nur Spalte 21 ausgelesen und geändert werden.

Die CSV ist folgendermaßen aufgebaut

01.
Product Name;Country of Origin;Weight; u.s.w.
Hoffe es kann mir einer helfen.
Weiß gerade nicht wie ich das angehen sollte.

Mit freundlichen Grüßen

Remie
Mitglied: bastla
16.01.2013, aktualisiert um 17:57 Uhr
Hallo eimer24 und willkommen im Forum!

Nicht zuletzt, da leere Felder (= unmittelbar aufeinander folgendende ";") per Batch etwas unhandlich zu verarbeiten sind, würde ich eher VBS verwenden - etwa:
01.
Quelle = "C:\download\products.csv" 
02.
Ziel = "C:\import\export.csv" 
03.
Spalte = 21 
04.
Delim = ";" 
05.
 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
T = Split(fso.OpenTextFile(Quelle).ReadAll, vbNewline) 
08.
 
09.
For i = 0 To UBound(T) 
10.
    If Trim(T(i)) <> "" Then 
11.
        Z = Split(T(i), Delim) 
12.
        Wert = Z(Spalte - 1) 
13.
 
14.
        Select Case Wert 
15.
        Case "YES" 
16.
            Wert = 99 
17.
        Case "NO" 
18.
            Wert = 0 
19.
        Case "LOW" 
20.
            Wert = 10 
21.
        End Select 
22.
 
23.
        Z(Spalte - 1) = Wert 
24.
        T(i) = Join(Z, Delim) 
25.
    End If 
26.
Next 
27.
 
28.
fso.CreateTextFile(Ziel).Write Join(T, vbNewline)
Nachtrag: Wenn's trotzdem Batch sein soll, relativ ungetestet:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "Quelle=C:\download\products.csv" 
03.
set "Ziel=C:\import\export.csv" 
04.
set /a Spalte=21 
05.
 
06.
>"%Ziel%" (for /f "usebackq eol=° delims=" %%z in ("%Quelle%") do ( 
07.
    set "ZeileEin=%%z" 
08.
    set "ZeileAus=" 
09.
    set /a Feld=1 
10.
    for %%a in ("!ZeileEin:;=","!") do ( 
11.
        if !Feld!==%Spalte% ( 
12.
            set "Wert=%%~a" 
13.
            if "%%~a"=="YES" set "Wert=99" 
14.
            if "%%~a"=="NO" set "Wert=0" 
15.
            if "%%~a"=="LOW" set "Wert=10" 
16.
            set "ZeileAus=!ZeileAus!;!Wert!" 
17.
        ) else ( 
18.
            set "ZeileAus=!ZeileAus!;%%~a" 
19.
20.
        set /a Feld+=1 
21.
22.
    echo(!ZeileAus:~1! 
23.
))
wobei in Zeile 6 nach "eol=" ein Zeichen folgen muss, das sicher nicht in den Daten vorkommmt ...

Grüße
bastla
Bitte warten ..
Mitglied: eimer24
17.01.2013, aktualisiert um 10:58 Uhr
Hallo,

ich danke dir !!

Also die VBS erstellt mir zwar die Ausgangs Datei, jedoch ist in Spalte 21 nichts Verändert.
Die Batch funktioniert da jedoch hervorragend.
Eine Zeile schmeißt Sie mir leider übern haufen aber ansonsten funktionierts.

Hast du eine schnelle Ahnung wieso die VBS nicht funktioniert ?

Ach und noch eine Frage =)
Kann man noch einstellen das er die Ausgangsdatei nach der Bearbeitung löscht ?

[Edit}
Ahh merke gerade, die Batch zerstört mir die Spaltenaufteilung, so kann sie nicht Importiert werden. =(

Mit freundlichen Grüßen

Remie
Bitte warten ..
Mitglied: pieh-ejdsch
17.01.2013 um 11:42 Uhr
moin Remie,

Kommt denn "YES"; "NO" und "LOW" auch in anderen Spalten vor?

Gruß Phil
Bitte warten ..
Mitglied: eimer24
17.01.2013 um 11:56 Uhr
Grüße,

jap, Spalte 21 sind die Lagerbestände und die bestehen nur aus diesen 3 Wörtern.

M.f.G.
Bitte warten ..
Mitglied: bastla
17.01.2013, aktualisiert um 12:23 Uhr
Hallo eimer24!

Poste doch bitte einmal (unter Verwendung von "Code"-Formatierung) die ersten etwa 10 Zeilen der CSV-Datei ...

BTW: Die Einträge "YES", "NO" und "LOW" sind immer in Großbuchstaben?

Grüße
bastla
Bitte warten ..
Mitglied: eimer24
17.01.2013 um 14:56 Uhr
immer in Großbuchstaben ja

Kann ich dir die per PN senden ?

Mit freundlichen Grüßen
Bitte warten ..
Mitglied: bastla
17.01.2013, aktualisiert um 17:20 Uhr
Hallo eimer24!

Ich habe mit Deiner Originaldatei (zum Testen suboptimal, da kein "LOW" bzw "NO" vorkommt, daher zusätzlich auch eine angepasste Kopie verwendet) und mit VBS - in dieser Fassung:
01.
Quelle = "C:\download\products_v1_0.csv" 
02.
Ziel = "C:\import\export.csv" 
03.
Spalte = 21 
04.
Delim = ";" 
05.
 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
T = Split(fso.OpenTextFile(Quelle).ReadAll, vbNewline) 
08.
 
09.
For i = 0 To UBound(T) 
10.
    If Trim(T(i)) <> "" Then 
11.
        Z = Split(T(i), Delim) 
12.
        Wert = Z(Spalte - 1) 
13.
 
14.
        Select Case Wert 
15.
        Case "YES" 
16.
            Wert = 99 
17.
        Case "NO" 
18.
            Wert = 0 
19.
        Case "LOW" 
20.
            Wert = 10 
21.
        End Select 
22.
        Z(Spalte - 1) = Wert 
23.
        T(i) = Join(Z, Delim) 
24.
 
25.
    End If 
26.
Next 
27.
 
28.
fso.CreateTextFile(Ziel).Write Join(T, vbNewline)
- Erfolg gehabt ...

Grüße
bastla

P.S.: Die CMD-Version hatte ich eigentlich ohnehin nur aus sportlichen Gründen hinzugefügt - da auch Anführungszeichen in den Datenfeldern enthalten sind, bleibe ich bei der VBS-Variante ...
Bitte warten ..
Mitglied: eimer24
22.01.2013 um 18:08 Uhr
Grüße dich,

danke erstmal.

Jetz verrat mir mal wieso das bei dir funktioniert und bei mir nicht.
Genau das gleiche wie das erste mal, export Datei wird erstellt aber nichts geändert.

Woran kann das denn liegen ?

Hoffe kannst mir helfen.

Mit freundlichen Grüßen

Remie
Bitte warten ..
Mitglied: bastla
22.01.2013 um 18:21 Uhr
Hallo eimer24!
Woran kann das denn liegen ?
Einzige Idee, die ich noch hätte: Das Format der Ausgangsdatei ist Unicode (war es bei Deiner Beispieldatei allerdings nicht) - dann müsstest Du die Zeilen 7 und 28 auf
T = Split(fso.OpenTextFile(Quelle, 1, True, True).ReadAll, vbNewline)
bzw
fso.CreateTextFile(Ziel, 2, True, True).Write Join(T, vbNewline)
ändern ...

Grüße
bastla
Bitte warten ..
Mitglied: eimer24
23.01.2013 um 09:22 Uhr
Hallo,

also wenn ich die Zeilen so ändere dann startet das Script garnicht und sagt mir "Laufzeitfehler in Microsoft VBScript".

Das kann doch nicht sein das es bei dir funktioniert und bei mir nicht, habs jetzt auch nochmal auf einen anderen Rechner mit XP ausprobiert, funktioniert auch nicht.

Danke dir schonmal!

M.f.G.
Remie
Bitte warten ..
Mitglied: eimer24
24.01.2013 um 09:52 Uhr
Hallo,

ich habs jetzt nochmal mit der CSV probiert die ich dir geschickt habe, mit der funktioniert es komischer weise.
Wenn ich meine komplette, aus 5103 Zeilen bestehende, benutze ändert sich garnichts.

Mit freundlichen Grüßen
Remie
Bitte warten ..
Mitglied: bastla
24.01.2013 um 12:43 Uhr
Hallo eimer24!

Da ich zum Testen ja nur die "funktionierende" Datei hatte, kann ich leider noch nicht einmal mehr raten, woran es beim "Original" liegt ...

Grüße
bastla
Bitte warten ..
Mitglied: marcel78
01.08.2013 um 11:18 Uhr
Hallo bastla,

bis heute genügte es mir immer im administrator-forum mitzulesen -> In diesem Sinne mal ein herzliches HALLO an alle hier!!!

Jetzt stehe ich allerdings etwas auf dem Schlauch.

Mit der vbs habe ich den gleichen Fehler wie Remie und die bat Datei zerhaut mir die csv, weil mein Dateilieferant im Text " Zeichen beutzt und
die batch dann in der neu abgelegten csv die Spalten umsortiert. Alle Versuche, vorher die "-Zeichen in etwas anderes zu ersetzen schlagen leider fehl.

Vielleicht hast du ja einen Tipp, wie ich vorher die "-Zeichen aus dem Text bekomme?

Vielen Dank und VG
marcel
Bitte warten ..
Mitglied: bastla
01.08.2013 um 11:48 Uhr
Hallo marcel78 und willkommen als Mitglied!

Kannst Du bitte einen Auszug (ggf mit anonymisierten Daten) aus Deiner csv-Datei als "Code" formatiert posten und kurz die gewünschte Verarbeitung erklären - ohne (einigermaßen originale) Daten ist es schwer, zu klären, warum etwas nicht wie gewünscht / erwartet funktioniert ...

Grüße
bastla
Bitte warten ..
Mitglied: marcel78
01.08.2013 um 12:03 Uhr
Moin und danke für die schnelle Antwort!

Kann ich die die per pn schicken? Ich stehe mit der Formatierung auf dem Schlauch. oder gibts da einen copy paste Trick?

VG
Bitte warten ..
Mitglied: bastla
01.08.2013 um 12:21 Uhr
Hallo marcel78!.

Formatierung: Einfach Deine kopierten Daten zwischen "<code>"- und "</code>"-Tags setzen.

Ansonsten kannst du mir natürlich auch eine PN schicken ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
01.08.2013 um 15:58 Uhr
Hallo marcel78!

Aufgrund der Hinweise per Mail (Änderung soll in Spalte 13 erfolgen, VBS funktioniert bei großer Datei nicht) eine Variante, bei der jeweils nur eine Zeile eingelesen, verarbeitet und gleich wieder in die Zieldatei geschrieben wird:
01.
Quelle = "D:\products.csv" 
02.
Ziel = "D:\export.csv" 
03.
Spalte = 13 
04.
Delim = ";" 
05.
 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
Set Ein = fso.OpenTextFile(Quelle) 
08.
Set Aus = fso.CreateTextFile(Ziel) 
09.
 
10.
Do Until Ein.AtEndOfStream 
11.
    Zeile = Ein.ReadLine 
12.
    If Trim(Zeile) <> "" Then 
13.
        Z = Split(Zeile, Delim) 
14.
        Wert = Z(Spalte - 1) 
15.
 
16.
        Select Case LCase(Wert) 
17.
        Case "ja" 'Kleinschreibung verwenden 
18.
            Wert = 10 
19.
        Case "nein" 'Kleinschreibung verwenden 
20.
            Wert = 0 
21.
        End Select 
22.
 
23.
        Z(Spalte - 1) = Wert 
24.
        Aus.WriteLine Join(Z, Delim) 
25.
    End If 
26.
Loop
Grüße
bastla
Bitte warten ..
Mitglied: marcel78
01.08.2013 um 16:06 Uhr
Hallo bastla!

Vielen Dank für die Unterstützung, daran hat es gelegen. Da muss ich wohl mal etwas am RAM basteln

Gelöst


Beste Grüße
marcel
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Dateien aus CSV mit Batch suchen
gelöst Frage von joes1609Batch & Shell5 Kommentare

Hallo zusammen, ich stehe gerade auf dem Schlauch. Ich habe eine CSV-Datei, in der stehen zusammengesetzt, jeweils ein kompletter ...

Batch & Shell
String aus Spalte in csv auslesen und ersetzen
Frage von mIsSteRBatch & Shell4 Kommentare

Hallo, meine aktuelle Frage bezieht sich auf diese Frage von Dienstag. Ich muss nun eine csv auslesen und dort ...

Batch & Shell
Per Batch eine Spalte in eine CSV Datei einfügen
gelöst Frage von mayli01Batch & Shell13 Kommentare

Hallo Forum :) Folgende Ausgangssituation. Ich habe eine CSV Artikelliste mit insgesamt 9 Spalten, einer Kopfzeile und etwa 50 ...

Batch & Shell
PowerShell Skript suchen und ersetzen in einer CSV
gelöst Frage von mayli01Batch & Shell3 Kommentare

Hallo Leute! Ich suche ein PowerShell Skript für eine CSV Datei. In der CSV gibt es eine Kopfzeile ("Artikel") ...

Neue Wissensbeiträge
Verschlüsselung & Zertifikate

19 Jahre alter Angriff auf TLS funktioniert immer noch

Information von BassFishFox vor 3 StundenVerschlüsselung & Zertifikate

Interessant zu lesen. Der Bleichenbacher-Angriff gilt unter Kryptographen als Klassiker, trotzdem funktioniert er oft noch. Wie wir herausgefunden haben, ...

Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 14 StundenWindows 102 Kommentare

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 16 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner3 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

Netzwerkmanagement
NAS über zwei weitere Ethernet Anschlüsse verbinden
gelöst Frage von Sibelius001Netzwerkmanagement16 Kommentare

Sorry - ich bin hier wahrscheinlich als kompetter IT Trottel unterwegs. Aber eventuell kann mir jemand ganz einfach helfen: ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen13 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...