Avatar billede nadster Nybegynder
21. januar 2004 - 14:38 Der er 16 kommentarer og
2 løsninger

replace fra CSV-fil

Hey

Jeg har en csv-fil, hvor jeg importerer dataene ind på en aså-side. Der bliver de så vist, og så langt så godt. Men pga. de data som ligger i csv-filen ikke er korrekte, forstået på den måde at € f.eks. bliver til € , ö bliver til Ö , é bliver til é og lignende.
Så jeg vil gerne have den til at replace de forskellige tegn til de rigtige bogstaver/tegn.

Så nogen forslag til hvordan det kan gøres? Går ud fra at der skal bruges en Replace funktion, men er lidt i tvivl om hvordan det gøres, og om det kan bruges når man henter dataene fra en csv-fil...
Avatar billede nute Nybegynder
21. januar 2004 - 15:15 #1
ligger data i din cvs fil i forkert format, eller er det når de kommer ud på fronten de er forkerte ?

du kan jo bruge fx:

Response.Write( Replace( LinjeFraDinFil, "€", "€" ) )

for at præsentere et Euro-tegn

/nute
Avatar billede nadster Nybegynder
21. januar 2004 - 15:20 #2
hvis man kigger i Excel, så er de forkerte, men hvis du åbner den i Notepad, så bliver tegnene rigtige. Jeg har prøvet at gemme filen som .txt og så hente den derfra, men det har heller ikke hjulpet når det først bliver skrevet ud.
Avatar billede nute Nybegynder
21. januar 2004 - 15:37 #3
oki ... så med andre ord:

du har en CSV fil der skal importeres til excel. Når du åbner filen i excel, så bliver specialtegn, som fx €, ö ol., vist som € og Ö. Det du har problemer med er at præsentere specialtegn i Excel når du importerer fra en CSV ?

/nute
Avatar billede nadster Nybegynder
21. januar 2004 - 15:42 #4
JA og NEJ. Jeg åbner og kigger i den i Excel, men det er bare for at se hvad der er i. Jeg er egenligt fuldstændig ligeglad med hvordan den ser ud i Excel. Men jeg finder det interessant, at den i Excel ikke kan vise tegnene, mens den godt kan i Notepad. Og at den så ikke kan på min asp-side. Det jeg i bund og grund gerne vil, er at have vist €-tegnet, og de andre special-tegn, korrekt på min asp-side.
Avatar billede nute Nybegynder
21. januar 2004 - 15:48 #5
ahh ... oki ... gidder du så lige at poste nogle linjer fra din CSV (hvor der er nogle specialtegn) + den kode du bruger til at hive data ud med  ? (ikke post hele .asp siden ... kun de par linjer der hiver teksten ud og skriver den ud på din side ;-) )
Avatar billede nadster Nybegynder
21. januar 2004 - 16:07 #6
fra csv:
21-01-2004 11:30,23,José Maria OLAZÁBAL,1,SP,"€ 10,108.34"
21-01-2004 11:30,18,Sven STRÜVER,2,GER,"€ 12,359.66"

fra asp:

Response.Write("<tr class='row2'>")
For ArrayIndex = 1 to ubound(myLocalFields,1)
Response.Write("<td>" & server.HTMLEncode(myLocalFields(ArrayIndex)) & "</td>")
Next
Response.Write("</tr>" & vbCrLF)
Avatar billede nute Nybegynder
21. januar 2004 - 16:33 #7
ahh... øv ...

nu er jeg ikke den helt store encoding-haj, så det kan godt være at denne løsning er lidt overkill. Umiddelbart ville jeg tro at hvis din CSV-fil var UTF-16 encodet, så ville det ikke være det store problem. Men ...jeg har brugt den tidligere til tilsvarende problemstilling, men jeg har igen kun kigget på en allerede eksisterende løsning ... desværre er det lidt arbejd at lave for at den skal fungere ... here it goes:

opret en array med alle dine "CSV specialtegn":

Dim arrSpecialChar(2)
arrSpecialChar(1) = "€"
arrSpecialChar(2) = "é"

Derefter laver du en array med tilsvarende HTML-værdier:
Dim arrHTMLChar(2)
arrHTMLChar(1) = "&euro;"
arrHTMLChar(2) = "&eacute;"

Derefter laver du en lille funktion der replacer dine specialtegn:

Function ReplaceBadChars( str )
    for i = 1 To UBound( arrSpecialChars )
        str = Replace( str, arrSpecialChars( i ), arrHTMLChars( i )
    next
    ReplaceBadChars = str
End Function

Som du kalder fra din ASP kode:

Response.Write("<tr class='row2'>")
For ArrayIndex = 1 to ubound(myLocalFields,1)
Response.Write("<td>" & server.HTMLEncode( ReplaceBadChars( myLocalFields(ArrayIndex) ) ) & "</td>")
Next
Response.Write("</tr>" & vbCrLF)

u c ?

/nute
Avatar billede nadster Nybegynder
21. januar 2004 - 16:39 #8
Kan godt se hvad du mener. Det er ikke noget jeg lige får tid at kigge på ny. Man når jo aldrig at blive færdig med noget, før der kommer nye hastesager på bordet. Men det er i hvert fald et forsøg hver.
Indtil videre så skal du have tak for hjælpen...
Avatar billede nadster Nybegynder
02. februar 2004 - 11:04 #9
jeg har fået lavet det her kode nu:

    Dim arrSpecialChars(11)
        arrSpecialChars(1) = "€"
        arrSpecialChars(2) = "É"
        arrSpecialChars(3) = "ë"
        arrSpecialChars(4) = "Ö"
        arrSpecialChars(5) = "é"
        arrSpecialChars(6) = "Á"
        arrSpecialChars(7) = "Ã¥"
        arrSpecialChars(8) = "ø"
        arrSpecialChars(9) = "Ü"
        arrSpecialChars(10) = "Ñ"
        arrSpecialChars(11) = "Ë"
        arrSpecialChars(12) = "ç"

    Dim arrHTMLChars(12)
        arrHTMLChars(1) = "&euro;"
        arrHTMLChars(2) = "&Eacute;"
        arrHTMLChars(3) = "&euml;"
        arrHTMLChars(4) = "&Ouml;"
        arrHTMLChars(5) = "&eacute;"
        arrHTMLChars(6) = "&Aacute;"
        arrHTMLChars(7) = "&aring;"
        arrHTMLChars(8) = "&oslash;"
        arrHTMLChars(9) = "&Uuml;"
        arrHTMLChars(10) = "&Ntilde;"
        arrHTMLChars(11) = "&Euml;"
        arrHTMLChars(12) = "&ccedil;"

    Public Function ReplaceBadChars(str)
        for i = 1 To UBound(arrSpecialChars,1)
            str = Replace(str, arrSpecialChars(i), arrHTMLChars(i))
        next
        ReplaceBadChars = str
    End Function


og så længere nede i koden kalder jeg function'en sådan her:

    OutputField = ReplaceBadChars(OutputField)


Hvis jeg har array'ene "sat til", så får jeg følgende fejl:

Der opstod en Microsoft VBScript-kompileringsfejl fejl '800a03ea'

Der er en syntaksfejl

aspfil.asp, linje 139

arrSpecialChars(1) = "€"
^


Kommenterer jeg dem ud får jeg til gengæld den her fejl:
Der opstod en Microsoft VBScript-kørselsfejl fejl '800a000d'
Typer stemmer ikke overens: 'ubound'

aspfil.asp, linje 167


Nogen ide om hvad der går galt?
Avatar billede nute Nybegynder
02. februar 2004 - 12:43 #10
1) arrays i VB er 0-baseret. start dine arrays på 0:

Dim arrSpecialChars(11)
        arrSpecialChars(0) = "€"
        arrSpecialChars(1) = "É"
osv

2) dine 2 arrays er ikke identiske:

Dim arrSpecialChars(11)
Dim arrHTMLChars(12)

disse skal jo være af samme længe

3) start din loop på 0 ...
for i = 0 To UBound(arrSpecialChars,1)

den kode fungerer fint for mig

:-)
Avatar billede nadster Nybegynder
02. februar 2004 - 13:00 #11
ovenstående ting er blevet opdateret. De fleste af dem var egenligt gjort, jeg fik bare kopieret det forkerte ind :)

Får stadigvæk følgende fejl:

Der opstod en Microsoft VBScript-kompileringsfejl fejl '800a03ea'
Der er en syntaksfejl
aspfil.asp, linje 139
arrSpecialChars(0) = "€"
^

Kand det have noget at gøre med, at jeg har koden til at ligge i en class, som så bliver inkluderet i selve den asp-fil hvor dataene bliver vist?

Bare lige for en ordens skyld, så kommer koden som den ser ud nu:

    Dim arrSpecialChars(11)
        arrSpecialChars(0) = "€"
        arrSpecialChars(1) = "É"
        arrSpecialChars(2) = "ë"
        arrSpecialChars(3) = "Ö"
        arrSpecialChars(4) = "é"
        arrSpecialChars(5) = "Á"
        arrSpecialChars(6) = "Ã¥"
        arrSpecialChars(7) = "ø"
        arrSpecialChars(8) = "Ü"
        arrSpecialChars(9) = "Ñ"
        arrSpecialChars(10) = "Ë"
        arrSpecialChars(11) = "ç"

    Dim arrHTMLChars(11)
        arrHTMLChars(0) = "&euro;"
        arrHTMLChars(1) = "&Eacute;"
        arrHTMLChars(2) = "&euml;"
        arrHTMLChars(3) = "&Ouml;"
        arrHTMLChars(4) = "&eacute;"
        arrHTMLChars(5) = "&Aacute;"
        arrHTMLChars(6) = "&aring;"
        arrHTMLChars(7) = "&oslash;"
        arrHTMLChars(8) = "&Uuml;"
        arrHTMLChars(9) = "&Ntilde;"
        arrHTMLChars(10) = "&Euml;"
        arrHTMLChars(11) = "&ccedil;"

    Public Function ReplaceBadChars(str)
        dim i
        for i = 0 To UBound(arrSpecialChars,1)
            str = Replace(str, arrSpecialChars(i), arrHTMLChars(i))
        next
        ReplaceBadChars = str
    End Function

og så
    OutputField = ReplaceBadChars(OutputField)
Avatar billede nute Nybegynder
02. februar 2004 - 13:06 #12
hmm ... underlig :-s den samme kode fungerer jo helt fint hos mig. Jeg tror ikke det har noget med at du har koden liggende i en class. det skal være ligegyldig.

men ... for "sjov". kan du ikke gøre om denne linje:

arrSpecialChars(0) = "€"

til

arrSpecialChars(0) = "xxx"

og se om du stadig får fejl ?

hvis du stadig får fejl, så må det være noget andet der er galt. du kan jo prøve at sende mig koden og en tekstfil, så skal jeg kigge på det: knut@xperimentum.com

/nute
Avatar billede nadster Nybegynder
03. februar 2004 - 10:04 #13
Jeg får stadigvæk fejl efter at have lavet arrSpecialChars om. For sjov prøvede jeg at udkommentere de to arrays, samt den nederste linie "OutputField = ReplaceBadChars(OutputField)" og så lavede jeg den her for at teste:

"OutputField = Replace(OutputField,"f","W")"
Den er der ingen problemer med, den erstatter fint f med W. Altså er der et eller andet med de Arrays, der gør at det ikke fungerer...

Jeg ved ikke lige om jeg har tilladelse til at sende koden ud af huset her, så det må jeg hellere lige vente med...
Avatar billede nute Nybegynder
03. februar 2004 - 10:10 #14
hmm .. well ... så kan jeg ikke sige andet end at den kode jeg har sendt til dig, fungerer for mig :-|
Avatar billede nadster Nybegynder
03. februar 2004 - 10:15 #15
nej okay. Jeg må prøve at søge andre græsgange. Men du skal i hvert fald have tak for hjælpen indtil nu.
Avatar billede nute Nybegynder
03. februar 2004 - 10:18 #16
det var så lidt :-)
Avatar billede nadster Nybegynder
03. februar 2004 - 10:43 #17
Jeg har fundet en midlertidig løsning. Jeg fandt jo ud af, at jeg godt kunne køre en enkelt linie Replace, så nu har jeg bare lavet en masse af dem, sådan her:

    OutputField = Replace(OutputField,"€","€")
    OutputField = Replace(OutputField,"É","É")
    OutputField = Replace(OutputField,"ë","ë")
    OutputField = Replace(OutputField,"Ö","Ö")
    OutputField = Replace(OutputField,"é","é")
    OutputField = Replace(OutputField,"Á","Á")
    OutputField = Replace(OutputField,"Ã¥","å")
    OutputField = Replace(OutputField,"ø","ø")
    OutputField = Replace(OutputField,"Ü","Ü")
    OutputField = Replace(OutputField,"Ñ","Ñ")
    OutputField = Replace(OutputField,"Ë","Ë")
    OutputField = Replace(OutputField,"ç","ç")

Det må jo så fungere indtil jeg finder noget mere smart. Men på den anden side, hvis jeg alligvel skal ind og tilføje en ny ting i hver array, for hver nyt tegn jeg støder på, plus jeg har functionen til at stå. Så giver det her jo egenligt mindre kode når det kommer til stykket. Men hvor "pæn" kodning det så er, kan så diskuteres. Det fungere i hvert fald nu.

Hvis du smider et svar nute, så får du nogle points som tak for hjælpen...
Avatar billede nute Nybegynder
03. februar 2004 - 10:50 #18
fino :-)
selv tak ...
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