• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Input CSV bestand

Status
Niet open voor verdere reacties.

hondel

Gebruiker
Lid geworden
29 okt 2008
Berichten
66
Ik probeer 3 CSV bestanden in het geheugen te laden met Excel (2010 & 2013).
2 bestanden (1.516 kB en 1 kB) gaan goed maar het derde bestand (1.015 kB) wordt niet volledig geladen.
Ook niet als het bestand als 1e geladen wordt.

Waar gaat het fout??????

Deze macro gebruik ik:
Code:
Public sLine_Data() As String
Public sLine_Omschrijving() As String
Public sLine_Promo() As String

Private Sub Workbook_Open()

Dim sMap As String

ReDim sLine_Data(0)
sMap = Sch.[S3] & "\" & Sch.[T3]
Open sMap For Input As #1

Line Input #1, sMap ' Datum bestand
Ho.[D6] = sMap

Do Until EOF(1)
  Line Input #1, sLine_Data(UBound(sLine_Data))
  ReDim Preserve sLine_Data(UBound(sLine_Data) + 1)
Loop
ReDim Preserve sLine_Data(UBound(sLine_Data) - 1)
Close #1

ReDim sLine_Omschrijving(0)
sMap = Sch.[S4] & "\" & Sch.[T4]
Open sMap For Input As #1

Do Until EOF(1)
  Line Input #1, sLine_Omschrijving(UBound(sLine_Omschrijving))
  ReDim Preserve sLine_Omschrijving(UBound(sLine_Omschrijving) + 1)
Loop
ReDim Preserve sLine_Omschrijving(UBound(sLine_Omschrijving) - 1)
Close #1

' Wordt niet compleet geladen (regel=1633 ipv 6666 regels)
ReDim sLine_Promo(0)
sMap = Sch.[S5] & "\" & Sch.[T5]
Open sMap For Input As #1

Do Until EOF(1)
  Line Input #1, sLine_Promo(UBound(sLine_Promo))
  ReDim Preserve sLine_Promo(UBound(sLine_Promo) + 1)
Loop
ReDim Preserve sLine_Promo(UBound(sLine_Promo) - 1)
Close #1

End Sub

De bijlage heb ik aangepast om te kunnen uploaden maar is een CSV bestand.
 
Laatst bewerkt:
Kijk eens naar het geheugengebruik als dat inlezen loopt. Je bent je geheugen aan het volgooien. Wat probeer je eigenlijk met die CSV bestanden te doen?

Overigens kan ik je bijlage niet openen. Excel crashed erop. Ik heb Office 2010.
Met Kladblok gaat het wel goed.
 
Laatst bewerkt:
Hoi Edmoor,

Er is ruim voldoende geheugen in de computer.
Als ik alleen het bestand “PromoData.csv” (zonder “_voor upload.xls”. Dat was alleen om te kunnen uploaden) in lees gaat het op de zelfde regel 1633 fout.
Een ander bestand is 50% groter en wordt zonder problemen geladen.

Ik doe dit omdat, bij het vullen van de Excel, elke keer gegevens uit de CSV bestanden gezocht moet worden.
 
Ok. En wil je per bestand alle regels in Excel hebben? Of zoek je per bestand bepaalde informatie?
In beide gevallen is het niet nodig om van elk bestand alle regels in een array te proppen.

Edit:
Ik heb je bestand even bekeken en vanaf regel 1634 zitten er control characters (Ascii 26) in het bestand. Dat zal zijn waar het inlezen op stuk loopt. Op deze manier: 911502||OK
Achter de OK staat een Ascii 26. Dit komt na regel 1633 vaker voor in de rest van het bestand.
Die Ascii 26 komt in zowel ANSI als UTF-8 in het bestand voor.
 
Laatst bewerkt:
Bedoel je dit? “OK?
Normaal moet dit een € teken zijn.
Op een of andere manier wordt dit teken verkeerd in de CSV gezet.
Kijken of ik dit met replace kan oplossen.
 
Ok, dan is die 26 dus sowieso fout en moet je er een 0128 van maken. Dus niet een 128 maar 0128.
Hou er bij het vervangen rekening mee dat die 26 in 2 varianten voor komt, ANSI en UTF-8.
 
Dat was inderdaad het probleem.
Ik heb dit toegevoegd en nu loopt het wel tot het einde.
Code:
sLine = Replace(sLine, Chr(26), "€").

Je zij dat ik onnodig geheugen aan het volgooien was.
Hoe zou jij het doen?
Zoiets:

Code:
sMap = Sch.[I12] & "\" & Sch.[K12]
Open sMap For Input As #1
Do Until EOF(1)
  Line Input #1, sLine
  If Val(sLine) = lArt Then
    bGevonden = True
    Exit Do
  End If
Loop
If bGevonden = False Then MsgBox "Geen vorige actie's gevonden.", vbOKOnly, sApp: Close #1: Exit Function
 
Ok dan. Probleem opgelost :)

Als je een regel met een bepaalde waarde in een tekst bestand zoekt zou ik dat ook op die manier doen. Dat gaat razensnel en kost geen geheugen.
Wel zou ik: If bGevonden = False Then
Wijzigen in: If Not bGevonden Then

En voor de leesbaarheid zou ik niet meerdere : gescheiden opdrachten op 1 regel gebruiken maar de opdrachten gewoon op een aparte regel zetten met een juist inspringpunt.
 
Laatst bewerkt:
Bedankt voor het kijken.

De tips ga ik zeker gebruiken.

Thx
 
Kijk ook eens naar de functie Freefile, dat kun je beter gebruiken dan #1.
I.E.: FileNum = Freefile()
En dan #Filenum gebruiken die is gedeclareerd als een Integer.
 
Laatst bewerkt:
You're welcome :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan