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
GELÖST

Arraywert läßt sich nicht in Datei schreiben

Frage Entwicklung VB for Applications

Mitglied: Gurkenhobel

Gurkenhobel (Level 1) - Jetzt verbinden

21.10.2012, aktualisiert 20:04 Uhr, 3492 Aufrufe, 4 Kommentare

Hallo,

ich arbeite mit kommaseparierten Datendateien (CSV). Hin und wider kommt mir mal eine Datei mit über 200 Datensätzen unter, die weniger Datenfelder als üblich (hier 18) enthält. Das letzte Feld ist immer das Datum in der üblichen Schreibeweise (TT.MM.JJJJ). Manchmal fehlt dies auch (es sind also nur 17 Datenfelder) und mein Skript bricht mit dem Typunverträglichkeitsfehler ab.

So möchte ich also die Ausgabe in eine andere Datei in der Art manipulieren, daß bei einer Anzahl der Datenfelder kleiner als 18 (UBound) ein String in die Ausgabedatei geschrieben wird. Leider kommt immer wieder bei dem "kürzeren Datensatz" der obige Fehler. Was kann man tun ? CStr und CDate funktioneren nicht. Hier Teile des Codes:

01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
 
03.
If fso.FileExists(EingabeDatei) Then 
04.
Set objEingabe = fso.OpenTextFile(EingabeDatei, 1) 
05.
Set objAusgabe = fso.CreateTextFile(Ausgabedatei, 2) 
06.
objEingabe.Skipline ' Die erste Zeile weglassen 
07.
 
08.
Do While not objEingabe.AtEndOfLine 
09.
Inhalt=objEingabe.ReadLine ' ReadAll 
10.
 
11.
arrFeld=Split(Inhalt, ";") ' in Arrays aufsplitten 
12.
 
13.
 .... 
14.
 
15.
' mit UBound prüfen ob 18 Datenfelder vorhanden 
16.
 
17.
Zahl=Ubound(arrFeld) ' Die höchste Zahl 
18.
 If Zahl=17 Then  
19.
  Datum=CDate(arrFeld(17)) ' <------------ Typen unverträglich 
20.
 else 
21.
  Datum=" Datum fehlt !" 
22.
 end if 
23.
 
24.
MsgBox Datum ' zur Kontrolle ! 
25.
 
26.
accNamen=arrFeld(10) & ";" & arrFeld(15) & ";" & arrFeld(11) & ";" & arrFeld(12) & ";" & Datum & ";1920x1080;D;" & UCase(arrFeld(16)) & ";" 
27.
 
28.
objAusgabe.WriteLine accNamen 
29.
 
30.
Loop 
31.
 
32.
objEingabe.Close 
33.
objAusgabe.Close 
34.
 
35.
Set objAusgabe = Nothing 
36.
Set objEingabe = Nothing 
37.
Set fso = Nothing 
38.
 
Eine andere Möglichkeit wäre wohl gewesen, über objEingabe.Readline zu prüfen ob das vierte Zeichen von rechts eine 2 ist. Aber das wäre auch gescheitert, denn das vorletzte Datenfeld kann manchmal auch Zahlen enthalten.

Freundliche Grüße

GH

Mitglied: bastla
21.10.2012 um 21:10 Uhr
Hallo Gurkenhobel!

Du könntest vorweg den Feldinhalt auf "Datumswert" prüfen:
If IsDate(arrFeld(17)) Then ...
- schließlich weist die Fehlermeldung darauf hin, dass eben doch nicht immer, wenn es ein 18. Feld im Datensatz gibt, auch ein Datum drin steht ...

Grüße
bastla
Bitte warten ..
Mitglied: Gurkenhobel
22.10.2012, aktualisiert um 15:00 Uhr
Hallo bastla,

Danke für Deine Hilfe:

Zitat von bastla:
- schließlich weist die Fehlermeldung darauf hin, dass eben doch nicht immer, wenn es ein 18. Feld im Datensatz gibt, auch ein Datum drin steht ...

die Abfrage von Dir übernimmt keine löscht ungültigen Datumsformate (z.B. 31.11.2011), d.h. das Feld in der neuen Datei blieb frei. Ich habe den Code im Block (Zeile 17 bis 22) etwas abgewandelt. Das ist nun meine endgültige Lösung:

01.
Zahl=Ubound(arrFeld) ' Die höchste Zahl 
02.
 If Zahl=17 Then 
03.
  if IsDate (arrFeld(17)) then 
04.
   Datum=CDate(arrFeld(17)) 
05.
  else 
06.
   Datum="ungültiges Datum" 
07.
  end if 
08.
 else 
09.
  Datum="fehlendes Datum" 
10.
 end if
Danke und Tschüs

GH

<edit> 15:00: kleine Korrektur</>
Bitte warten ..
Mitglied: bastla
22.10.2012, aktualisiert um 12:26 Uhr
Hallo Gurkenhobel!

Abgesehen davon, dass eine Abfrage nix löscht, war das ohnehin etwa so gemeint, wie Du es jetzt umgesetzt hast ...

Grüße
bastla
Bitte warten ..
Mitglied: Gurkenhobel
22.10.2012 um 15:07 Uhr
Hi bastla,
abschließend habe ich meine Falschaussage noch mal revidiert.
Ich wünsche Dir noch einen schönen Tag ;-]

GH
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch-Skript: Messdaten in Textdatei finden und in eine neue Datei schreiben (5)

Frage von habmalnefrage zum Thema Batch & Shell ...

Batch & Shell
gelöst 2 große TXT Dateien vergleichen und Unterschiede in andere Datei schreiben (6)

Frage von sid.pdm zum Thema Batch & Shell ...

Windows Systemdateien
gelöst Registry-Schlüssel per Batch auslesen und in Datei schreiben (9)

Frage von Philzip zum Thema Windows Systemdateien ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...