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

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, 3554 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

VB for Applications
Bestimmte Daten aus eine CSV-Datei in eine Excel-Tabelle importieren (2)

Frage von MariaElena zum Thema VB for Applications ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...