Avatar billede mihl Nybegynder
19. juli 2008 - 21:30 Der er 27 kommentarer og
1 løsning

Fejl? i csv

Jeg har lige fundet ud af at min genererede csv-fil bruger den forkerte linje separator... Linjeskift virker, hvis man åbner den i Excel eller wordpad, men i notepad, bliver der blot vist en firkant. Hvordan kan jeg identificere hvilken linje-separator der er brugt, samt hvilken bør jeg bruger for at det virker i min kode:

    Open dintekstfil For Input As #1
    'Line Input #1, linestr
    Do While Not EOF(1)
        Line Input #1, linestr
        parts = Split(linestr, vrlf)
        Open "c:\guide.txt" For Append As #2
        Print #2, parts(felt1) & ";" & parts(felt2) & ";" & parts(felt3) & ";" & parts(felt4) & ";" & parts(felt5)
        Close #2
    Loop
    Close #1

Problemet er at koden ser hele csv-filen som én lang linje... Hvilket jo ikke helt var meningen...
Avatar billede erikjacobsen Ekspert
19. juli 2008 - 21:35 #1
Når du bruger windows-programmer skal du måske bruge  vbcrlf.  Det er selvfølgelig tegn på mangel på omtanke og kompatibilitet, at man ikke kan klare de 3 fremherskende metoder.
Avatar billede mihl Nybegynder
19. juli 2008 - 21:40 #2
csv-filen er genereret af en os400-server, så jeg tvivler på at det er vbcrlf der er brugt...
Avatar billede arne_v Ekspert
19. juli 2008 - 21:40 #3
En firkant i.s.f. linie skift betyder med stor sandynlighed LF (*nix konvention)
fremfor CRLF (MS konvention).

Det bedste vil være at få filen lavet med CRLF.

Det næstbedste vil være at lave noget kode som læser filen binært og manuelt
laver linier.

Det nemmeste vil være at:
- læse det hele som en linie
- split på LF
- en for løkke over de rigtige linier
- split på separator inden i for løkken
Avatar billede arne_v Ekspert
19. juli 2008 - 21:41 #4
Hvis den er hentet med FTP og man husker at angive text/ascii fremfor image/binary,
så bør den faktisk få CRLF.
Avatar billede mihl Nybegynder
19. juli 2008 - 21:43 #5
Den kommer ikke via ftp, men ssh
Avatar billede arne_v Ekspert
19. juli 2008 - 21:46 #6
Mulighed for at bruge FTP evt. oven på SSH ?
Avatar billede mihl Nybegynder
19. juli 2008 - 21:46 #7
har testet lidt frem og tilbage... det er ikke lf der er linebreak... linjeskift virker også i msgbox'e, men altså ikke i notepad...
Avatar billede mihl Nybegynder
19. juli 2008 - 21:47 #8
Og nej... ingen mulighed for ftp..
Avatar billede erikjacobsen Ekspert
19. juli 2008 - 21:48 #9
Mange teksteditors (dog ikke lige notepad) kan klare flere formaet. Prøv med http://editplus.com/ der også kan gemme i andre linieskifts-formater.
Avatar billede thesurfer Nybegynder
19. juli 2008 - 21:50 #10
Det plejer også gerne at hjælpe, hvis man åbner i Wordpad og gemmer filen igen (uden ændringer). Så kan du åbne den i Notepad uden problemer.

Men det hjælper ikke på din kode, med mindre at gøre gør det før du kører din kode..
Avatar billede mihl Nybegynder
19. juli 2008 - 21:51 #11
Jeg så meget gerne at jeg kunne slippe for at åbne filen i et andet program, da det skal gå så automatisk så muligt...
Avatar billede erikjacobsen Ekspert
19. juli 2008 - 21:53 #12
Så må du finde ud af hvilket tegn, der er tale om. Du bruger Windows, så det er lidt bøvlet. Men en simpel visning af de enkelte tegn i en fil, med deres ordinal værdi, kan fås med pspad (Google vil så gerne være din ven)
Avatar billede arne_v Ekspert
19. juli 2008 - 21:54 #13
Kan filen være i memory ? Hvis ja, så kan jeg lave en "dobbelt split" løsning.
Avatar billede thesurfer Nybegynder
19. juli 2008 - 21:54 #14
Hvis det har en relation til: http://www.eksperten.dk/spm/838832

..du ved hvor mange felter der er -> du ved hvor mange ";" der er..

Man behøver faktisk ikke være vide hvilket format der er brugt til linieskift, idet man kan finde ud af det, og bruge det i en variabel.

Efter det sidste ";" skulle linieskift formatet gerne være. Det er vel på 1 til 2 tegn, efterfulgt af et gyldigt tegn (f.eks. et bogstav fra alfabetet).
Tegnene fra det sidste ";" og til det først gyldige tegn, er linieskift formatet. Split på baggrund af dette resultat.

Metoden kan garanteret optimeres.
Avatar billede mihl Nybegynder
19. juli 2008 - 21:55 #15
arne_v filen fylder ca. 10 kb
Avatar billede thesurfer Nybegynder
19. juli 2008 - 21:56 #16
PS: Hvis filen autogenereres, dvs linieskift formatet er det samme hver gang, skal du jo sådan set bare lave 3 (jvf "de 3 fremherskende metoder" i 19/07-2008 21:35:25) tests?

Så er det jo bare med at teste de 3 formater, og når du har fundet den korrekt, hardcoder du bare formatet i din kode.

For simpelt en løsning=
Avatar billede thesurfer Nybegynder
19. juli 2008 - 21:56 #17
Rettelse til 19/07-2008 21:56:28:

"For simpelt en løsning?"
Avatar billede mihl Nybegynder
19. juli 2008 - 21:58 #18
Jeg forstår ikke hvad du mener med "de 3 fremherskende metoder"
Avatar billede mihl Nybegynder
19. juli 2008 - 21:58 #19
Og linjeskift-formatet er det samme hver gang
Avatar billede thesurfer Nybegynder
19. juli 2008 - 22:00 #20
Jeg kan dem ikke selv, men så vidt jeg kan se, er det noget i stil med følgende:

*nix (unix/linux distroer): bruger LF
Windows: bruger CRLF

Den tredje kender jeg ikke..
Avatar billede thesurfer Nybegynder
19. juli 2008 - 22:02 #21
Måske kan det her hjælpe: http://en.wikipedia.org/wiki/Newline

Måske menger erikjacobsen: CR, LF, CRLF
Avatar billede erikjacobsen Ekspert
19. juli 2008 - 22:02 #22
Det var Mac i gamle dage: CR
Avatar billede erikjacobsen Ekspert
19. juli 2008 - 22:02 #23
nemli'
Avatar billede thesurfer Nybegynder
19. juli 2008 - 22:03 #24
menger = mener.. stavefejl er gratis, og der er happy hour.. :-)
Avatar billede mihl Nybegynder
19. juli 2008 - 22:08 #25
Super... har fundet ud af at man skulle bruge vblf ikke bare lf.... Dohh... Hvordan erstatter jeg så alle vblf i en fil med vbcrlf ?
Avatar billede thesurfer Nybegynder
19. juli 2008 - 22:09 #26
Så skal du bare brug "vbLF" i stedet for "vrlf".
Avatar billede thesurfer Nybegynder
19. juli 2008 - 22:09 #27
Eller lave en Replace, men det kan vel være lige meget, hvis du bare vil splitte på linieskift, som er LF?
Avatar billede mihl Nybegynder
19. juli 2008 - 22:18 #28
Jeg har selv fixet det, tak for hjælpen alle sammen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester