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

gelöst CSV-Datei Spalten per Batch auf 0 setzen

Mitglied: elfatalelegre

elfatalelegre (Level 1) - Jetzt verbinden

19.03.2009, aktualisiert 18.10.2012, 6467 Aufrufe, 11 Kommentare

Hallo zusammen,

Ich habe etwa 2500 CSV-Dateien in einem Ordner mit folgendem Aufbau:

Zeile 1: 10008368;8793;0;13.03.2009;;;;;;LAGER;KA;NH;S/A;0022,0;0100,0;01,200;547;;13.03.2009;12:23:41;;;;
Zeile 2: 10008369;8793;0;13.03.2009;;;;;;LAGER;KA;NH;S/A;0022,0;0100,0;01,200;547;;13.03.2009;12:23:41;;;;
Zeile 3: ....

Das Erzeugerprogramm hat die Daten leider falsch erzeugt, ich kann mir aber weiterhelfen wenn ich per Batchbefehl folgende Änderungen in allen Dateien vornehme:

1. die zweite Spalte soll den Wert 0 erhalten (statt hier wie im Beispiel die 8793)
2. die Spalte mit "KA" (variable Textwerte) soll den Wert "SSH" erhalten

Kann mir jemand weiterhelfen, wie man das angeht?

Danke im voraus!

Gruß
elfatalegre
Mitglied: 76109
19.03.2009 um 19:51 Uhr
Hallo,

ist das eine einmalige Angelegenheit oder kommt das öfter vor?
Sind die zu ändernden Spalten 2 und 11, so wie in den Zeilen oben?
Ist der Dateipfad konstant. Wenn ja bitte angeben?

Gruß Dieter
Bitte warten ..
Mitglied: elfatalelegre
19.03.2009 um 20:01 Uhr
Hallo,

das ist eine einmalige Sache, sobald der Programmanbieter seine Software geändert hat, brauche ich es nicht mehr. Aber derzeit landen täglich etwa 120 Dateien davon im Ordner...

Richtig, die zu ändernden Spalten sind die Spalten 2 und 11.

Der Dateipfad ist egal, könnte man für die Batchlauf nach c:\batch\ verschieben.

Gruß
Gregor
Bitte warten ..
Mitglied: 76109
19.03.2009 um 20:27 Uhr
Hallo,

danke für die schnelle Antwort.

Du kannst auch den Originalpfad verwenden, weil ich die Exportdateien in einen Unterordner schreibe. Das macht es einfacher d.h. aus dem Original-Ordner lesen
und in den Unter-Ordner neu schreiben.

Gruß Dieter

PS. Gibt es Leerzeilen mit ";;;"
Bitte warten ..
Mitglied: Biber
19.03.2009, aktualisiert 18.10.2012
Moin elfatalegre,

willkommen im Forum.
Wir hatten Varianten dieses Themas schon ein- oder zweimal hier durchdekliniert und eine (typische) Lösung findest Du z.B. in diesem Thread Steuerzeichen per vbs aus txt-Datei entfernen oder auch über eine Forumssuche nach "ReadAll".

Idee (auch bei vielen anderen Lösungen) war:
  • "nur" Batch ist erstens ein bisschen langsam
  • aber auch grundsätzlich ist es vom Algorithmus her ein bisschen langsam, zeilenweise vorzugehen und diese Zeile wiederum in Felder/Tokens zu zerbröseln, einzelne Werte zu ersetzen und danach wieder aus vielen Feldern eine Zeile und aus vielen Zeilen eine Textdatei und aus vielen Dateien eine Genausoviel-Dateien-Fast-Kopie zeilenweise zu schreiben...
  • außerdem erfordern die leeren Felder ";;;;;" zumindest im Batch eine Sonderlocke ... einfacher wäre es, wenn NULL-Felder mit "NULL" oder "" oder whatever kenntlich wären
  • deshalb -> WENN ES DIE DATENINHALTE ERLAUBEN: lieber die ganze Datei als einen Klumpen auf- und anfassen und in diesem Klumpen alle ";KA;" durch ";SSH;" mit ReplaceAll() ersetzen und alle ";8793;" durch ";0;".

---> wenn allerdings in der 2.Spalte (also die mit Beispielwert 8793) je Datei oder gar innerhalb einer Datei unterschiedliche Werte stehen, dann müssen wir eben die "Feldliste" auch als Liste behandeln - aber auch das geht mit VBS schneller.

Deshalb Klärungsfrage: Stehen in "Spalte2" je Datei (oder noch öfter) unterschiedliche Werte oder immer "8793"?

Grüße
Biber
Bitte warten ..
Mitglied: elfatalelegre
20.03.2009 um 08:32 Uhr
Guten Morgen!

@Biber: grundsätzlich ändern sich je Zeile (theoretisch) jedesmal Spalte 2 und Spalte 11, es sind also keine konstanten Werte.

@Dieter: wie oben im Beispiel stehend gibt es Leerzellen, die Spalten 2 und 11 sind allerdings immer befüllt.

Gruß

Gregor
Bitte warten ..
Mitglied: 76109
20.03.2009 um 12:03 Uhr
Hallo Gregor und Biber,

Biber hat recht. Mit 2500 Dateien kann das eine Weile dauern.
Da es aber kein Dauerzustand ist, reicht das wohl behelfsmäßig aus.

Getestet habe ich 10 Csv-Dateien a 65536 Zeilen.
Das sind ca. 50 MB und gedauert hat' es etwa 30 Sekunden.

Beim Starten des Scripts wird eine Eingabebox mit der Pfadabfrage angezeigt.
Es werden nur CSV-Dateien im angegeben Pfad eingelesen und bleiben auch
unverändert. Die konvertierten Dateien werden in den Sub-Ordner ...\Export
geschrieben. Und am Ende wird eine Meldung "Anzahl Dateien..." ausgegeben.

01.
Dateiname = ConvertCvs.Vbs
01.
Option Explicit 
02.
 
03.
Dim Fso, cPath, cFolder, cFile, cName, cFound, sFolder, sFile, i, s 
04.
 
05.
Set Fso = CreateObject("Scripting.FileSystemObject")  
06.
 
07.
cPath = InputBox("Bitte Pfad mit den Csv-Dateien eingeben.", _ 
08.
                 "Csv-Dateien konvertieren") 
09.
 
10.
If cPath = "" Then Wscript.Quit 
11.
     
12.
Set cFolder = Fso.GetFolder(Fso.GetAbsolutePathName(cPath)) 
13.
 
14.
sFolder = cFolder.Path & "\export" 
15.
 
16.
If Not Fso.FolderExists(sFolder) Then Call Fso.CreateFolder(sFolder) 
17.
 
18.
For Each cFound In cFolder.Files 
19.
  If LCase(Fso.GetExtensionName(cFound.Name)) = "csv" Then 
20.
    i = i + 1 
21.
    Set cFile = Fso.OpenTextFile(cFound.Path) 
22.
    Set sFile = Fso.CreateTextFile(sFolder & "\" & cFound.Name) 
23.
    Do Until cFile.AtEndOfStream 
24.
      s = Split(cFile.ReadLine, ";") 
25.
      If UBound(s) >= 10 Then _ 
26.
         s(1) = 0:  s(10) = "SSH":  sFile.WriteLine Join(s, ";") 
27.
    Loop 
28.
    cFile.Close 
29.
    sFile.Close 
30.
  End If 
31.
Next 
32.
 
33.
MsgBox "Es wurden " & i & " Csv-Dateien gefunden und konvertiert.", , "Hinweis" 
34.
 
35.
Wscript.Quit
Gruß Dieter
Bitte warten ..
Mitglied: lemmi222
20.03.2009 um 12:12 Uhr
Statt vb oder CMD-Batch würde ich für diesen Zweck awk empfehlen. awk gibt es für praktisch jedes Betriebssystem.
Bitte warten ..
Mitglied: 76109
20.03.2009 um 12:22 Uhr
Hallo lemmi222,

dann schlage ich vor, Du schreibst ein awk-Code für Gregor.


Gruß Dieter
Bitte warten ..
Mitglied: elfatalelegre
20.03.2009 um 13:45 Uhr
Hallo zusammen, das hat prima geklappt

Vielen Dank!
Bitte warten ..
Mitglied: lemmi222
20.03.2009 um 13:57 Uhr
hat sich zwar erledigt, aber einfach mal so

type Dateiname | awk -F "," {'print $1'"text,"$3","$4 ...'} > neue Datei


Gruß

Lemmi
Bitte warten ..
Mitglied: 76109
20.03.2009 um 14:40 Uhr
Hallo Gregor,

freut mich das es geklappt hat.


Gruß Dieter
Bitte warten ..
Ähnliche Inhalte
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 ...

Entwicklung

Bearbeitung einer CSV Datei an bestimmter Spalte

gelöst Frage von IT-WurzelEntwicklung13 Kommentare

Hallo an alle, ich bin gerade diesem Forum beigetreten, und wünsche allen erst einmal ein herzliches "Hallo" nun zu ...

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

CSV Zeilen in Spalten per Batch-Skript

gelöst Frage von Florian-PEBatch & Shell2 Kommentare

Einen wunderschönen guten Morgen wünsche ich, ich habe ein marginales Problem beim strukturieren einer völlig desaströs formatierten .csv-Datei. Leider ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 7 StundenErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Windows 10

Windows 10 on ARM: von Microsoft entfernte Info - Klartext, was nicht geht

Information von kgborn vor 9 StundenWindows 10

Windows 10 on ARM ist ja eine neue Variante, die Microsoft im Verbund mit Geräteherstellern am Markt etablieren will. ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgborn vor 9 StundenMicrosoft7 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 2 TagenWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Heiß diskutierte Inhalte
Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1026 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Firewall
RB2011 Firewall Rule eine bestimmte Mac oder IP Adresse nicht zu blockieren
Frage von lightmanFirewall15 Kommentare

Hallo liebes Forum mit ihren Spezialisten. Ich habe meine Firewall so konfiguriert das kein Endgerät ohne meine Speziellen Erlaubnis ...

Humor (lol)
Was könnte man mit einem Server machen? Idee gesucht
Frage von 2SeitenHumor (lol)15 Kommentare

Hey Zusammen Ich habe einen alten HP G2 Rackserver zu Hause rumliegen. 28GB Ram, 1xAMD Prozi mit etwa 2GHz. ...

Webbrowser
Welcher Browser ist der Beste?
Frage von justtinWebbrowser13 Kommentare

Hallo Leute Ich habe eine interessante Frage. Mich wurde mal interessieren welcher Browser ist eure meinung nach der beste? ...