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, 3523 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 ..
Ähnliche Inhalte
Windows 10
gelöst Zeichenfolge in .reg Datei schreiben (Registry) (4)

Frage von MedicalAd zum Thema Windows 10 ...

Batch & Shell
gelöst Batch Eingabe in Datei schreiben (2)

Frage von MedicalAd zum Thema Batch & Shell ...

Batch & Shell
gelöst Größe einer Datei per BATCH in eine TXT schreiben (5)

Frage von marvinpl zum Thema Batch & Shell ...

Neue Wissensbeiträge
Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Router & Routing

PfSense auf Supermicro Intel Xeon D-15x8 SoC Bare Bone

Tipp von Dobby zum Thema Router & Routing ...

Windows Server

Exchange 2010 auf Windows Server 2016 und AD

(2)

Tipp von Herbrich19 zum Thema Windows Server ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Brauche Hilfe: Mit (schnellem) WLAN Strecke überbrücken (19)

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

Basic
Programmierung von Windows Programmen (10)

Frage von Ghost108 zum Thema Basic ...

C und C++
Fehlendes verständiss von C und C++ (8)

Frage von zelamedia zum Thema C und C ...