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

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, 1949 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
gelöst Hilfe Bei einem vbs Script (19)

Frage von Hattori-Hanzo zum Thema Batch & Shell ...

VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

Batch & Shell
PowerShell-Script zum Prüfen ob Datei(en) existieren (2)

Frage von Bonsai0815 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Tipps & Tricks

Wie Hackt man sich am besten in ein Computernetzwerk ein

(29)

Erfahrungsbericht von Herbrich19 zum Thema Tipps & Tricks ...

Humor (lol)

Bester Vorschlag eines Supporttechnikers ever: APC

(15)

Erfahrungsbericht von DerWoWusste zum Thema Humor (lol) ...

Windows Server

Exchange 2010 Active Directory und Windows Server 2016

(4)

Erfahrungsbericht von Herbrich19 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Internet
gelöst Mitarbeiter surft auf unerwünschter Seite - Wie damit umgehen? (38)

Frage von sabines zum Thema Internet ...

Netzwerke
Wie erstelle ich ein Intranet (19)

Frage von Leonardnet zum Thema Netzwerke ...

LAN, WAN, Wireless
gelöst Eintägige Netzwerkunterbrechung trotz Backupleitung (15)

Frage von iAmbricksta zum Thema LAN, WAN, Wireless ...

Netzwerke
VPN-Server einrichten PPTPD-Einrichtung gescheitert (15)

Frage von MIlexx zum Thema Netzwerke ...