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

Fehletrhaftes vbs Script. Werte werden falsch ausgelesen bzw. geschrieben. Kann mir hier jemand helfen?

Frage Entwicklung Batch & Shell

Mitglied: thomas1972

thomas1972 (Level 1) - Jetzt verbinden

11.03.2013, aktualisiert 11:58 Uhr, 1964 Aufrufe, 2 Kommentare

Hallo,

ich habe eine csv Datei die wie folgt aufgebaut ist

Test;name
20309;
20309;
20309;we
20309;te
20309;er
20309;ei
20309;ws
20309;si
10030;
10030;ei
10030;ws
10030;si
10030;

habe hierzu ein script gefunden, welches mir die Werte nebeneinander schreibt

01.
Ein = "c:\temp\funktion.csv" 
02.
Aus = "C:\Quelle\funktion_neu.csv" 
03.
Delim = ";" 
04.
 
05.
Set fso = CreateObject("Scripting.FileSystemObject") 
06.
Set d = CreateObject("Scripting.Dictionary") 
07.
 
08.
T = Split(fso.OpenTextFile(Ein).ReadAll, vbNewLine) 
09.
Ueber = Split(T(0), Delim)(0) 'erstes Feld der ersten Zeile übernehmen 
10.
For i = 1 To UBound(T) 'Bezeichnungen sammeln 
11.
    If Trim(T(i)) <> "" Then 'keine Leerzeile verarbeiten 
12.
        Bez = Split(T(i), Delim)(1) 'zweites Feld der Datenzeile lesen ... 
13.
        If Bez <> "" Then 
14.
            If Not d.Exists(Bez) Then '... und falls noch nicht vorhanden ... 
15.
                Ueber = Ueber & Delim & Bez '... der Überschrift hinzufügen 
16.
                Index = Index + 1 'Index für Felder hochzählen 
17.
                d.Add Bez, Index 'Bezeichnung und Index in Dictionary hinzufügen 
18.
            End If 
19.
        End If 
20.
    End If 
21.
Next 
22.
 
23.
Daten = Ueber 'Ausgabe beginnt mit Überschrift 
24.
Dim Felder 'Array initialisieren 
25.
ReDim Felder(Index) 
26.
For j = 1 To Index: Felder(j) = 0: Next 'Feldwerte auf 0 setzen 
27.
For i = 1 To UBound(T) 'alle Datenzeilen verarbeiten 
28.
    If Trim(T(i)) <> "" Then 'keine Leerzeile verarbeiten 
29.
        Bez = Split(T(i), Delim)(1) 'zweites Feld der Datenzeile lesen 
30.
        Nr = Split(T(i), Delim)(0) 'erstes Feld der Datenzeile lesen ... 
31.
        If Nr = Zuletzt Then '... und prüfen, ob noch gleiche Nummer 
32.
            FeldIndex = d.Item(Bez) 'Index für Bezeichnung ermitteln 
33.
            Felder(FeldIndex) = Felder(FeldIndex) - 1  'Anzahl erhöhen 
34.
        Else 
35.
            If i > 1 Then 'nicht erste Zeile, ... 
36.
                Daten = Daten & vbNewLine & Join(Felder, Delim) 'Datensatz der Ausgabe hinzufügen 
37.
            End If 
38.
            For j = 1 To Index: Felder(j) = 0: Next 'Feldwerte auf 0 setzen 
39.
            Felder(0) = Nr '... und Nr für neuen Satz eintragen 
40.
            FeldIndex = d.Item(Bez) 'Index für Bezeichnung ermitteln 
41.
            Felder(FeldIndex) = Felder(FeldIndex) - 1 'Anzahl erhöhen 
42.
        End If 
43.
        Zuletzt = Nr 
44.
    End If 
45.
Next 
46.
Daten = Daten & vbNewLine & Join(Felder, Delim) 'letzten Datensatz der Ausgabe hinzufügen 
47.
fso.CreateTextFile(Aus).Write Daten 'Ausgabedatei schreiben

aber Anstatt
Test;We;Te;Er;Ei;Ws;Si;
20309;-1;-1;-1;-1;-1;1
10030;0;0;0;-1;-1;-1

schreibt er


Test;We;Te;Er;Ei;Ws;Si;
20307;-1;-1;-1;-1;-1;1
10038;0;0;0;-1;-1;-1

Warum verändert er den Wert 20309 in 20307
bzw. 10030 ind 10038

es werden alle Werte in dern eu geschriebenen Datei verändert
Kann mir dieses nicht erklären, daher hoffe ich, jemand kann den Fehler erkennen.
Mitglied: 106543
11.03.2013 um 15:10 Uhr
Hi,

hab das ganze mal getestet und bei mir kommt am Ende wieder was anderes raus :D
den Fehler hab ich jetzt leider nicht gefunden, werde aber weitersuchen ;)

Ausgabe bei mir:
01.
Test;we;te;er;ei;ws;si 
02.
20307;-1;-1;-1;-1;-1;-1 
03.
10028;0;0;0;-1;-1;-1
Grüße
Exzellius
Bitte warten ..
Mitglied: bastla
11.03.2013, aktualisiert um 16:29 Uhr
Hallo thomas1972!

Bei einem leeren zweiten Feld im Datensatz ergibt sich ein FeldIndex von 0, und da in Felder(0) die Zeilenbezeichnung steht, wird diese um 1 vermindert - mit dieser Version sollte das nicht mehr passieren:
01.
Ein = "c:\temp\funktion.csv" 
02.
Aus = "C:\Quelle\funktion_neu.csv" 
03.
Delim = ";" 
04.
 
05.
Set fso = CreateObject("Scripting.FileSystemObject") 
06.
Set d = CreateObject("Scripting.Dictionary") 
07.
 
08.
T = Split(fso.OpenTextFile(Ein).ReadAll, vbNewLine) 
09.
Ueber = Split(T(0), Delim)(0) 'erstes Feld der ersten Zeile übernehmen 
10.
For i = 1 To UBound(T) 'Bezeichnungen sammeln 
11.
    If Trim(T(i)) <> "" Then 'keine Leerzeile verarbeiten 
12.
        Bez = Split(T(i), Delim)(1) 'zweites Feld der Datenzeile lesen ... 
13.
        If Bez <> "" Then 
14.
            If Not d.Exists(Bez) Then '... und falls noch nicht vorhanden ... 
15.
                Ueber = Ueber & Delim & Bez '... der Überschrift hinzufügen 
16.
                Index = Index + 1 'Index für Felder hochzählen 
17.
                d.Add Bez, Index 'Bezeichnung und Index in Dictionary hinzufügen 
18.
            End If 
19.
        End If 
20.
    End If 
21.
Next 
22.
 
23.
Daten = Ueber 'Ausgabe beginnt mit Überschrift 
24.
Dim Felder 'Array initialisieren 
25.
ReDim Felder(Index) 
26.
For j = 1 To Index: Felder(j) = 0: Next 'Feldwerte auf 0 setzen 
27.
For i = 1 To UBound(T) 'alle Datenzeilen verarbeiten 
28.
    If Trim(T(i)) <> "" Then 'keine Leerzeile verarbeiten 
29.
        Bez = Split(T(i), Delim)(1) 'zweites Feld der Datenzeile lesen 
30.
        Nr = Split(T(i), Delim)(0) 'erstes Feld der Datenzeile lesen ... 
31.
        If Nr = Zuletzt Then '... und prüfen, ob noch gleiche Nummer 
32.
            If Bez <> "" Then 
33.
                FeldIndex = d.Item(Bez) 'Index für Bezeichnung ermitteln 
34.
                Felder(FeldIndex) = Felder(FeldIndex) - 1  'Anzahl erhöhen 
35.
            End If 
36.
        Else 
37.
            If i > 1 Then 'nicht erste Zeile, ... 
38.
                Daten = Daten & vbNewLine & Join(Felder, Delim) 'Datensatz der Ausgabe hinzufügen 
39.
            End If 
40.
            For j = 1 To Index: Felder(j) = 0: Next 'Feldwerte auf 0 setzen 
41.
            Felder(0) = Nr '... und Nr für neuen Satz eintragen 
42.
            If Bez <> "" Then 
43.
                FeldIndex = d.Item(Bez) 'Index für Bezeichnung ermitteln 
44.
                Felder(FeldIndex) = Felder(FeldIndex) - 1 'Anzahl erhöhen 
45.
            End If 
46.
        End If 
47.
        Zuletzt = Nr 
48.
    End If 
49.
Next 
50.
Daten = Daten & vbNewLine & Join(Felder, Delim) 'letzten Datensatz der Ausgabe hinzufügen 
51.
fso.CreateTextFile(Aus).Write Daten 'Ausgabedatei schreiben
Noch eine Frage: Warum -1 in den Zeilen 34 und 44 (passt auch nicht zum Kommentar )? Eigentlich wird ja die Häufigkeit des Vorkommens von "we", "te", etc gezählt ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Suche jemanden der mir in Powershell helfen kann !!!
Frage von PowershellAnfaenger1990Batch & Shell10 Kommentare

Hallo, seit gestern bin auf Probearbeiten für eine Ausbildungsstelle, allerdings habe ich keinerlei vertiefte Erfahrung in Programmieren. Nun wurde ...

Virtualisierung
VirtualBox VM nach Update nicht mehr zugreifbar - kann jemand helfen?
gelöst Frage von Maxxx01Virtualisierung7 Kommentare

Hallo, ich habe Virtualbox auf WIN 7 laufen und darin als virtuelle Maschine Lubuntu. VB hat mir ein Update ...

Windows Server
Völlig falsche Werte nach gpupdate
Frage von ofodagWindows Server4 Kommentare

Hallo zusammen, ich habe folgendes Problem bei einem einzigen Server. Ich habe eine Policy bzgl. WSUS die auch bei ...

VB for Applications
VBS Script kann Prgramm nicht starten
gelöst Frage von C.BoernerVB for Applications15 Kommentare

Hallo ihr Admins, Ich habe folgendes Scenarios ein Programm läuft im Hintergrund (Drivve-Image) das übergibt Werte an ein VBS ...

Neue Wissensbeiträge
Windows 10

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

Erfahrungsbericht von rzlbrnft vor 1 StundeWindows 101 Kommentar

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 3 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 Trojaner2 Kommentare

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

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 1 TagRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

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

LAN, WAN, Wireless
Brainstorming, einfachste Option 1 getrenntes LAN (mit WAN zugang)
Frage von 132954LAN, WAN, Wireless13 Kommentare

Hi, folgendes: Wir bekommen eine Glasfaser Leitung, Und das sollte Optional so aussehen: Ein Modem/Router für das WAN, ein ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

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

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