Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Excel 2000/VBA] Logfiles met datums import probleem

Pagina: 1
Acties:

  • VROEM!
  • Registratie: Februari 2000
  • Laatst online: 18-05 16:41

VROEM!

broembroem!

Topicstarter
Ik heb hier logbestanden op mijn werk waarin de eerste kolom een datum met een tijd is. Dat ziet er als volgt uit:
code:
1
13-6-2008 00:00:04;<tweede kolom etc>

Vanaf de tweede kolom staan er vrij random getallen (meetwaarden van sensoren).

Nu doet zich het probleem voor dat excel de eerste kolom tot op 12 juni als tijd ziet en vanaf 13 juni als tekst. Ook als ik bij het importeren van beide aangeef dat de eerste kolom een datum bevat.

Ik wil om twee redenen van dit probleem af:
-Van de eerste kolom wil ik de datum strippen om het maken van grafieken makkelijker te maken.
-Excel moet aan de eerste kolom tijd toe kennen, omdat ik in een ander werkblad zoekfuncties verwerkt heb die een tijd nodig hebben. Zodra excel de eerste kolom als tekst ziet werkt daarvan niets meer.

Ik heb het volgende geprobeerd om van dit probleem af te komen:
-Van het type van de inhoud van de cel aangeven dat dit tijd is (dus uu:mm:ss), dit werkt tot 12 juni en daarna niet
-Alleen de laatste 8 karakters van de cel houden (dit werkt de ene dag wel, de andere dag niet, ik heb daar geen lijn in kunnen ontdekken)
-Een spatie extra invoegen tussen de datum en de tijd, ook dit werkt op random dagen wel en andere dagen niet

Als het "niet werkt" kan het volgende gebeuren: Excel geeft een foutmelding, of excel handhaaft gewoon het datatype tekst, ongeacht wat er in de cel staat.

Wat ook optreedt is dat het handmatig invoegen van een spatie (door alle enkele spaties te zoeken en te vervangen met 2 spaties) wel werkt als je het handmatig uitvoert maar niet als je de macro uitvoert die je bij die aktie hebt opgenomen.

In de sheets waarin "het niet werkt" is het zo dat ik een cel kan selecteren, vervolgens de cursor in de formule balk kan zetten (zonder tekens te selecteren), dan enter drukken en ineens staat de inhoud wel goed, terwijl ik eigenlijk niets aan de inhoud gewijzigd zou moeten hebben.

Verder kan ik de bestanden in notepad/kladblok gewoon inzien en in de eerste kolom zie ik geen verschil in formatting tussen 12 en 13 juni. Hieronder ter illustratie een kleine copy paste van de eerste cellen zoals ze zijn opgeslagen in het tekstbestand op 12 juni resp. 13 juni.
code:
1
2
12-6-2008 00:00:06;-2.65000009536743;
13-6-2008 00:00:05;-2.63000011444092;

Op deze dagen is niet aan de software die de logs schrijft geprogrammeerd, dus aan de kant van het schrijven van de kale logs is niets veranderd.

Ik raak een beetje door de mogelijkheden heen van wat ik kan proberen, dus help me hier aub even ;) De bedoeling is dat er een spreadsheet komt waarin ik elke dag gewoon een logbestand kan openen en verwerken zonder van dag tot dag de datum te moeten debuggen.

ieeeepppppp :P


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

VROEM! schreef op dinsdag 24 juni 2008 @ 10:35:
Nu doet zich het probleem voor dat excel de eerste kolom tot op 12 juni als tijd ziet en vanaf 13 juni als tekst. Ook als ik bij het importeren van beide aangeef dat de eerste kolom een datum bevat.
[/code]
Dat zegt al genoeg. :)
Excel probeert het te parsen als mm/dd en dat gaat vanaf de 13e niet meer goed. Check even je datuminstellingen en vziw kun je bij importeren ook expliciteit het te gebruiken datumformaat opgeven.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • VROEM!
  • Registratie: Februari 2000
  • Laatst online: 18-05 16:41

VROEM!

broembroem!

Topicstarter
Wat is er verschillend aan 12-6 vs 13-6? Als ik terug kijk wat excel van de macro maakt als je als datum importeert staat daar trouwens het volgende:
code:
1
FieldInfo:=Array(Array(1, 4))

Ik heb dan bij importern aangegeven dat die kolom van het type D/M/J is. DD/MM/JJJJ is niet een optie waar je in het dialoogvenster voor kunt kiezen.

[ Voor 80% gewijzigd door VROEM! op 24-06-2008 10:49 ]

ieeeepppppp :P


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

VROEM! schreef op dinsdag 24 juni 2008 @ 10:44:
Wat is er verschillend aan 12-6 vs 13-6?
Als je default de amerikaanse notatie gebruikt is de een wél een datum, de ander niet. ;)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • VROEM!
  • Registratie: Februari 2000
  • Laatst online: 18-05 16:41

VROEM!

broembroem!

Topicstarter
Aha, ik heb hier de nederlandse notatie (hele bedrijf heeft NL windows + office), maar in VB geldt vaak "ineens" de amerikaanse (ook hier weer niet altijd :') ). Vandaar dat e.e.a handmatig wel werkt en via de macro ineens niet.

Ik heb het inmiddels trouwens opgelost. De logfile is eerst via een soort copy-paste aktie gekopieerd, geplakt en doorgerekend(dit is veruit het snelste met de grote files die ik heb, scheelt echt minuten per file). Daarna lees ik nog een keer elke regel in en strip de laatste acht karakters uit alle tekens voor de eerste puntkomma van die regel. Per file kost dit een seconde of 10 dus dat is wel te doen.

ieeeepppppp :P


Verwijderd

VROEM! schreef op dinsdag 24 juni 2008 @ 14:38:
Aha, ik heb hier de nederlandse notatie (hele bedrijf heeft NL windows + office), maar in VB geldt vaak "ineens" de amerikaanse (ook hier weer niet altijd :') ). Vandaar dat e.e.a handmatig wel werkt en via de macro ineens niet.
vb importeringsacties lopen altijd onder amerikaans datumformaat, correct.
Ik heb het inmiddels trouwens opgelost. De logfile is eerst via een soort copy-paste aktie gekopieerd, geplakt en doorgerekend(dit is veruit het snelste met de grote files die ik heb, scheelt echt minuten per file). Daarna lees ik nog een keer elke regel in en strip de laatste acht karakters uit alle tekens voor de eerste puntkomma van die regel. Per file kost dit een seconde of 10 dus dat is wel te doen.
dit kan wel wat efficienter, maar als dit voldoende is... wel opletten dat alle datumformaatomwisselingsscenario's in dat geval correct omgerekend worden.

  • VROEM!
  • Registratie: Februari 2000
  • Laatst online: 18-05 16:41

VROEM!

broembroem!

Topicstarter
Verwijderd schreef op dinsdag 24 juni 2008 @ 15:40:
[...]
vb importeringsacties lopen altijd onder amerikaans datumformaat, correct.
Dit had ik ook door. De pech is alleen dat ik soms met een tekst string zit waar een datum in NL format in voorkomt en die is in VB dan ineens wel Nederlands, om maar wat te noemen 8)7
Ik zou echt heel gelukkig worden als iedereen op dit soort dingen gewoon een enkele vaste genormeerde standaard zou willen aannemen |:( De duitsers hebben voor de meest vreemde dingen een DIN (Deutsche Industrie Norm) die redelijk consistent te noemen is. Amerikanen hebben wel e.e.a dat een standaard heet te zijn maar waar weinig lijn in te ontdekken is en wij hebben hier PC's met Nederlandstalige Office instellingen met daarachter amerikaanse Visual Basic.
[...]
dit kan wel wat efficienter, maar als dit voldoende is... wel opletten dat alle datumformaatomwisselingsscenario's in dat geval correct omgerekend worden.
Hoe zou jij het doen? Ik strip uiteindelijk trouwens alleen de tijden uit de string, dus hoe de datum geschreven wordt is niet zo relevant meer. Zolang de tijd maar uu:mm:ss is gaat het goed.

ieeeepppppp :P


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

VROEM! schreef op dinsdag 24 juni 2008 @ 10:44:
code:
1
FieldInfo:=Array(Array(1, 4))
Vreemd. Dit geeft aan dat de 1e kolom algemeen formaat is en de tweede dmy-datumformaat :?
Verwijderd schreef op dinsdag 24 juni 2008 @ 15:40:
[...]
vb importeringsacties lopen altijd onder amerikaans datumformaat, correct.
[...]
Niet helemaal waar, imho.
Met
code:
1
.TextFileColumnDataTypes = Array(xlDMYFormat, xlTextFormat)

Geef je aan welk formaat gebruikt moet worden. Uit de help:
Met de xlColumnDataType-constanten in de volgende tabel kunt u de gebruikte kolomgegevenstypen of de ondernomen acties tijdens het importeren van gegevens opgeven.

Constante Beschrijving
xlGeneralFormat Algemeen
xlTextFormat Tekst
xlSkipColumn Kolom overslaan
xlDMYFormat Datumnotatie: dag-maand-jaar
xlDYMFormat Datumnotatie: dag-jaar-maand
xlEMDFormat Datum, EMD
xlMDYFormat datumnotatie: maand-dag-jaar
xlMYDFormat Datumnotatie: maand-jaar-dag
xlYDMFormat Datumnotatie: jaar-dag-maand
xlYMDFormat Datumnotatie: jaar-maand-dag
Maw er is ook in VBa geen enkele reden om de datums niet meteen goed te importeren.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Pagina: 1