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

Automatisches Skript für CSV Bearbeitung

Frage Entwicklung VB for Applications

Mitglied: Tranministrator

Tranministrator (Level 1) - Jetzt verbinden

31.08.2011, aktualisiert 10:01 Uhr, 4084 Aufrufe, 12 Kommentare

Hallo liebe Leser und Helfer,

ich bin bei meinen Versuchen gerade draufgekommen wie viel das Spaß machen kann an einem VBS Script was zu ändern usw.
Doch jetzt komme ich leider nicht mehr weiter weil es zu kompliziert wird
Ich benötige dies für eine Automatisierte Formatierung einer CSV Datei.
Kann mir da bitte jemand helfen?

Besten Dank im Vorraus

Viele Grüße
Robert

Ursprung *.csv mit mehreren Zeilen:
"APC";"APC";"012074";"854";"TEST";"12";"test";"black-green";"no size";"keine Angabe";"keine Angabe";"";"0";"222";"444";"test";"5";

Ziel ist eigene Textdatei mit folgender Formatierung:
black-green; black-gre

Zielbeschreibung in Wörtern: aus der CSV Datei soll die Spalte 8 kopiert werden und in eine neue *.txt Datei eingefügt werden.
Dazu kommt dann noch dass hier ein Semikolon folgt und danach der gleiche Wert noch ein Mal, aber beschnitten auf 8 Stellen.
Eine Version ohne der Beschneidung des gleichen Wertes wäre auch akzeptabel.


Momentaner Stand:

;;;;;;;"black-green"

verursacht durch folgendes Skript:
01.
Const iPath = "quelle" 
02.
Const ePath = "Ziel" 
03.
 
04.
Const Delim = ";"  'Bei Tab: Delim = vbTab 
05.
 
06.
Dim Fso, iFile, eFile, iText, eText(7), i 
07.
 
08.
Set Fso = CreateObject("Scripting.FileSystemObject") 
09.
Set iFile = Fso.OpenTextFile(iPath) 
10.
Set eFile = Fso.CreateTextFile(ePath) 
11.
     
12.
Do Until iFile.AtEndOfStream 
13.
    iText = Split(iFile.ReadLine, Delim, 9) 
14.
    If UBound(iText) >= 6 Then 
15.
        For i = 7 To 7: eText(i) = iText(i): Next 
16.
        eFile.WriteLine Join(eText, Delim) 
17.
    End If 
18.
Loop 
19.
 
20.
iFile.Close:  eFile.Close 
21.
 
22.
MsgBox "Der Exportvorgang ist beendet!", vbInformation, "Meldung"
Erweiterung:
siehe Ziel

Hint:
"APC";"APC";"012074";"854";"TEST";"12";"test";"";"no size";"keine Angabe";"keine Angabe";"";"0";"222";"444";"test";"5";

es gibt auch Datensätze die Nullwerte enthalten, diese gehören dann nicht in die Zieldatei übernommen

[Edit Biber] Codeformatierung nachgetragen [/Edit]
Mitglied: onkel-ossi
31.08.2011 um 01:07 Uhr
Hallo,

nachdem ich dein Problem verstanden habe hier die Lösung:

01.
Const iPath = "quelle" 
02.
Const ePath = "Ziel" 
03.
 
04.
Const Delim = ";" 'Bei Tab: Delim = vbTab 
05.
 
06.
Dim Fso, iFile, eFile, iText, eText(7), i 
07.
 
08.
Set Fso = CreateObject("Scripting.FileSystemObject") 
09.
Set iFile = Fso.OpenTextFile(iPath) 
10.
Set eFile = Fso.CreateTextFile(ePath) 
11.
 
12.
Do Until iFile.AtEndOfStream 
13.
  iText = Split(iFile.ReadLine, Delim, 9) 
14.
  If UBound(iText) >= 6 Then 
15.
    if len(iText(7)) > 3 then 
16.
      if len(iText(7)) <= 10 then 
17.
        eFile.WriteLine mid(iText(7),2,len(iText(7))-2) & ";" & mid(iText(7),2,len(iText(7))-2)  
18.
      else 
19.
        eFile.WriteLine mid(iText(7),2,len(iText(7))-2) & ";" & mid(iText(7),2,8) 
20.
      end if 
21.
    End If 
22.
  End If 
23.
Loop 
24.
 
25.
iFile.Close 
26.
eFile.Close 
27.
 
28.
MsgBox "Der Exportvorgang ist beendet!", vbInformation, "Meldung"
Viel Spaß damit
Thomas
Bitte warten ..
Mitglied: onkel-ossi
31.08.2011 um 01:10 Uhr
Input:

01.
"APC";"APC";"012074";"854";"TEST";"12";"test";"black-green";"no size";"keine Angabe";"keine Angabe";"";"0";"222";"444";"test";"5"; 
02.
"APC";"APC";"012074";"854";"TEST";"12";"test";"back-bn";"no size";"keine Angabe";"keine Angabe";"";"0";"222";"444";"test";"5"; 
03.
"APC";"APC";"012074";"854";"TEST";"12";"test";"green-green";"no size";"keine Angabe";"keine Angabe";"";"0";"222";"444";"test";"5"; 
04.
"APC";"APC";"012074";"854";"TEST";"12";"test";"";"no size";"keine Angabe";"keine Angabe";"";"0";"222";"444";"test";"5"; 
05.
"APC";"APC";"012074";"854";"TEST";"12";"test";"green-green";"no size";"keine Angabe";"keine Angabe";"";"0";"222";"444";"test";"5";
liefert folgenden Output:
01.
black-green;black-gr 
02.
back-bn;back-bn 
03.
green-green;green-gr 
04.
green-green;green-gr
Ich war noch so frei und habe eine Prüfung eingebaut, damit es auch funktioniert, wenn der Text kürze als 10 Zeichen (8 text+2 ", zeile 16) ist.

Gruss
Thomas
Bitte warten ..
Mitglied: bastla
31.08.2011 um 01:12 Uhr
Hallo Transministrator!

Etwa so:
01.
Const iPath = "quelle" 
02.
Const ePath = "Ziel" 
03.
 
04.
Const Delim = ";" 'Bei Tab: Delim = vbTab 
05.
 
06.
Set Fso = CreateObject("Scripting.FileSystemObject") 
07.
Set iFile = Fso.OpenTextFile(iPath) 
08.
Set eFile = Fso.CreateTextFile(ePath) 
09.
 
10.
Do Until iFile.AtEndOfStream 
11.
    iText = Split(iFile.ReadLine, Delim, 9) 
12.
    If UBound(iText) >= 7 Then 
13.
        eText = Replace(iText(7), """", "") 
14.
        If Trim(eText) <> "" Then eFile.WriteLine eText & Delim & Left(eText, 8) 
15.
    End If 
16.
Loop 
17.
 
18.
eFile.Close 
19.
iFile.Close
Grüße
bastla

[Edit] Was ich auch immer so trödeln muss ... [/Edit]
Bitte warten ..
Mitglied: bastla
31.08.2011 um 01:15 Uhr
@onkel-ossi
Ich war noch so frei und habe eine Prüfung eingebaut, damit es auch funktioniert, wenn der Text kürze als 10 Zeichen (8 text+2 ", zeile 16) ist.
Einem "Left()" ist es egal, wie lang ein Text ist ...

... und mit
 If UBound(iText) >= 6 Then
ist nicht sicher gestellt, dass es auch ein iText(7) gibt ...

Grüße
bastla
Bitte warten ..
Mitglied: Tranministrator
31.08.2011 um 01:19 Uhr
Hallo Thomas,

das schaut ja wunderbar aus, perfekter gehts nicht
Super Arbeit geleistet

Ich danke dir recht herzlich

Viele Grüsse

Robert
Bitte warten ..
Mitglied: Tranministrator
31.08.2011 um 01:27 Uhr
Hey bastla,

ich hab jetzt mal deine Version hergenommen, verstehe aber den Unterschied noch nicht so ganz zum Thomas seinem Script.
Hast du da eine kurze Erklärung für mich?

Danke

Viele Grüße

Robert
Bitte warten ..
Mitglied: onkel-ossi
31.08.2011 um 01:31 Uhr
Zitat von bastla:
@onkel-ossi
> Ich war noch so frei und habe eine Prüfung eingebaut, damit es auch funktioniert, wenn der Text kürze als 10
Zeichen (8 text+2 ", zeile 16) ist.
Einem "Left()" ist es egal, wie lang ein Text ist ...


das ist grundsätzlich richtig, aber ich nutze ja nicht LEFT, da die Texte mit einem " enden und dieses nicht mit übernommen werden sollte setze ich die Funktion MID ein.

... und mit
 If UBound(iText) >= 6 Then 
> 
ist nicht sicher gestellt, dass es auch ein iText(7) gibt ...

stimmt, hier sollte dann der Code geändert werden:

01.
If UBound(iText) >= 7 Then
Gruss
Thomas
Bitte warten ..
Mitglied: Tranministrator
31.08.2011 um 01:32 Uhr
Hey Bastla,

besten dank dir auch für dein tolles Skript, das ist erste Sahne

Viele Grüße

Robert
Bitte warten ..
Mitglied: bastla
31.08.2011 um 01:35 Uhr
Hallo Tranministrator!

Groß sind die Unterschiede ja nicht (mit Ausnahme der Absicherung, falls tatsächlich ein Datensatz kein Feld 8 haben sollte - UBound() liefert ja als Ergebnis den höchsten Index des Arrays, und wenn iText(7) benötigt wird, muss dieser Index eben mindestens 7, und nicht 6 sein; das hattest allerdings Du schon verbrochen ).

In meiner etwas knapper formulierten Variante werden zunächst die Anführungszeichen des Feldes 8 eliminiert und dann geprüft, ob der verbleibende Teil aus mehr als Leerzeichen besteht (wenn auch Leerzeichen ok wären, müsstest Du Trim() entfernen). Dann werden einfach der gesamte Feldinhalt, das Trennzeichen und die ersten maximal 8 Zeichen (sind es bereits weniger, dann eben soviele, wie noch vorhanden sind) von links in die Zieldatei geschrieben ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
31.08.2011 um 01:36 Uhr
@onkel-ossi
ich nutze ja nicht LEFT
Es gibt ja auch selten nur einen Weg zum Ziel (obwohl es auch dem Mid() egal wäre, ob es tatsächlich 8 Stellen liefern kann) ...

Grüße
bastla
Bitte warten ..
Mitglied: onkel-ossi
31.08.2011 um 01:37 Uhr
Hallo Robert,

bastla entfernt mit der Funktion REPLACE die " aus deinen Texten, das ist ein eleganter Zug und macht die weitere Verarbeitung einfacher (darauf hätte ich ja auch kommen können )!
Meine Version "schnippelt" den Text mit der Funktion MID aus den begrenzenden " heraus.

Beide Versionen sollten das gleiche Ergebnis liefern (wenn du in "meiner" Version noch in Zeile 14 die 6 durch eine 7 ersetzt.

Gruss
Thomas
Bitte warten ..
Mitglied: Tranministrator
31.08.2011 um 06:40 Uhr
Hallo Ihr Zwei

Ja das war mein Fehler, bin da leider noch nicht so versiert wie ich gerne wäre.
Noch einmal ein Hoch auf euch beide, vielen Dank für die Bereitstellung

Viele Grüße

Robert
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Bearbeitung einer csv-Datei
Frage von VolkerKuBatch & Shell13 Kommentare

Hallo, ich habe folgebndes Problem,. Ich habe ein eine Tabelle in iner csv-Datei. Die Spalten werden durch Semikolon getrennt. ...

Batch & Shell
Skript für: Automatisch generierte CSV Datei
gelöst Frage von janelsaesserBatch & Shell3 Kommentare

Hallo zusammen, für einen automatischen Upload von Bilder in unser Personalsystem, brauche ich ein Skript (am besten PowerShell) welches ...

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 ...

Linux Tools
CSV-Daten zurechtbauen in ein Skript
gelöst Frage von Jens4everLinux Tools2 Kommentare

Moin zusammen, ich habe eine Datei "Datei", die so aufgebaut ist: (Geburtstag; Name; E-Mailadresse) Mit grep ziehe ich aus ...

Neue Wissensbeiträge
Windows 10

Windows 10 Hello-Anmeldung per Foto ausgehebelt

Tipp von kgborn vor 3 StundenWindows 10

Windows Hello ist eine Funktion, um sich per Fingerabdruck-, Gesichts- oder Iriserkennung bei Windows 10-Geräten anzumelden (siehe), setzt aber ...

Perl

Perl hat heute Geburtstag: 30 Jahre Perl: Lange Gesichter zum Geburtstag

Information von Penny.Cilin vor 10 StundenPerl2 Kommentare

Hallo, auch wenn es wenige wissen und noch weniger Leute es nutzen. Perl hat heute Geburtstag. 30 Jahre Perl ...

Sicherheit

Blackberry stirbt - Keine Updates für Priv mehr

Tipp von certifiedit.net vor 11 StundenSicherheit1 Kommentar

Blackberry wird zu einer 08/15 Firma und geht wohl mehr und mehr den Weg, den HTC schon ging. Von ...

Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 1012 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Heiß diskutierte Inhalte
Windows Server
SCCM 2016: PXE Boot des Clients schlägt fehl
Frage von gabeBUWindows Server23 Kommentare

Hallo Zusammen Ich habe eine Testumgebung erstellt um über SCCM 2016 einen virtuellen Client aufzusetzen. Folgende Maschinen habe ich ...

Netzwerkgrundlagen
Belibiges Teilnetz einer Subnetzmaske rausfinden?
gelöst Frage von CenuzeNetzwerkgrundlagen19 Kommentare

Wundervollen Gutentag, mittlerweile kann ich Subnetting so einigermaßen, aber ein Problem habe ich noch. Netzwerkadresse und Boradcast errechnen ist ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless12 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Exchange Server
Exchange empfängt Emails - Kann aber keine Senden
gelöst Frage von niklasschaeferExchange Server11 Kommentare

Hallo, ich stehe gerade bei mir zuhause vor folgender Problemstellung. Gegeben sind 2x Hyper-V Host mit Windows Server 2016 ...