Avatar billede madssch Nybegynder
03. februar 2006 - 11:31 Der er 23 kommentarer og
1 løsning

Import af komma separeret fil

Hej Eksperter!

Jeg har en funktion, som importerer indholdet af en komma separeret fil, som efterfølgende gemmes i en MSSQL database. Dette er umiddelbart ikke noget problem - og dog:

Filen indeholder nogle adresseoplysninger. Problemet er, at hvis en adresse indeholder komma (f.eks. vejnavn 9, 2. tv.) - så forskyder det komma hele rækkefølgen, og de efterfølgende elementer bliver indsat i forkerte felter i databasen.

Programmet jeg eksporterer filen fra (Microsoft C5), kan desværre ikke eksportere til en semikolon separeret fil.

Hvad kan jeg stille op her?
Avatar billede cpufan Juniormester
03. februar 2006 - 11:44 #1
kan du ikke selv sætte separeringstegnet?
Avatar billede Slettet bruger
06. februar 2006 - 05:32 #2
Hvorfor ikke bare lave replacement af komma om til noget andet der hvor folk gemmer deres adresse som indeholder komma fx. Og så når det skal smides i databasen så skal det replacement selvfølgelig ophøre igen, sådan at der kommer til at være et komma i databsen...

\Dan
Avatar billede madssch Nybegynder
06. februar 2006 - 13:27 #3
cpufan: Nej, jeg kan ikke selv vælge separeringstegn.

dannielsen: Lad mig give dig eksemplet:

Kundenr,"Firmanavn","Vejnavn 2, 3. tv.","","9000 Aalborg","Danmark","","","info@domain.dk","http://www.domain.dk"

Jeg tager hver linje i tekstfilen og omdanner til et array for herefter at gemme det i databasen. Først tænkte jeg, at jeg kunne erstatte "," med ";" og bruge split(";") i stedet for split(","), men som du kan se, fungerer det ikke, da seperatoren mellem kundenr og firmanavn ikke bliver omdannet, og mit array er derfor ikke gyldigt.

Som jeg ser det er problenet i dit forslag, at jeg ikke kan replace kommaet i adresse før jeg har elementet i mit array - og her er det allerede for sent - så er array'et ødelagt.
Avatar billede Slettet bruger
07. februar 2006 - 01:48 #4
hmm...
Jeg er ikke helt sikker på at vi forstår hinanden...
Jeg mener at der hvor tekst-filen bliver oprettet skal kommaet replaces...
Hvordan bliver tekst-filen oprettet?
- Eller de tekst-filer du har med at gøre er måske allerede oprettet?
Dette her ligner mest af alt, i mine øje, noget som kommer fra et sted hvor man skal "tilmelde" sig et eller andet, og det er så i det script hvor dette bliver udført at jeg vil foreslå dig at du laver et replacement af kommaer i de felter hvor det er relavant...

\Dan
Avatar billede Slettet bruger
07. februar 2006 - 01:52 #5
- Jeg vil ved nærmere eftertanke sige, at hvis det her forslag ikke kan lade sig gøre, bliver det her MEGET omstændigt...
For så skal vi igang med at analysere hvert punkt i arrayet...
Her kunne man selvfølgelig godt lave et script som tager højde for nogle undtagelser i adressen... Men der vil bare være meget stor risiko for at "fejlen" stadig vil være der...

\Dan
Avatar billede madssch Nybegynder
07. februar 2006 - 09:19 #6
Som jeg først skrev, så eksporteres filen fra debitor kartoteket i C5. Her kan jeg vælge mellem flere forskellige eksporterings formater - heriblandt komma separeret, men desværre ikke semikolon separeret.

Af andre tilgængelige eksporteringsformater kan nævnes Lotus1, Lotus2, Quattro, Symphony10, Symphony11, Text og Comma7 !

Jeg har naturligvis selv forsøgt mig med diverse replace muligheder, men har endnu ikke fundet den rigtigt...
Avatar billede Slettet bruger
07. februar 2006 - 09:43 #7
OK... Så lad os lige prøve noget sjovt... Nu tager jeg eksemplet som du tidligere har skrevet og regner med at der hvor postnr og by står at det altid står som det gør der...
<%
strNOGET = "Kundenr,""Fimanavn"",""Vejnavn 2, 3.tv."","""",""9000 Aalborg"",""Danmark"","""","""",""info@domain.dk"",""http://www.domain.dk"""
s = split(strNOGET,",")
kundenr = s(0)
firmanavn = s(1)
    if isnumeric(left(Replace(s(5),"""",""),4)) then
vejnavn = s(2) & "," & s(3)
by = s(5)
land = s(6)
email = s(9)
homepage = s(10)
    else
vejnavn = s(2)
by = s(4)
land = s(5)
email = s(8)
homepage = s(9)
    end if   
%>
- Det eksempel du ser her kan kun finde ét komma i adresse-feltet (vejnavn) - IKKE TO!!!

- Men hvis det ikke er noget problem burde det her virke...

\Dan
Avatar billede madssch Nybegynder
07. februar 2006 - 09:49 #8
Jeg har selv prøvet noget meget identisk med dit forslag - og det fungerer delvist. Jeg er 98% sikker på, at der ikke vil komme 2 kommaer i adressefeltet, men hvad nu hvis firmanavnet f.eks. er "Hansen, Nielsen og Frandsen" - så har jeg balladen igen... Og hvad nu hvis det er et udenlandsk postnummer og by - så ved jeg ikke hvor meget "left" jeg skal indsætte...
Avatar billede madssch Nybegynder
07. februar 2006 - 09:54 #9
Jeg sidder stadig med en teori om, at jeg kan starte med Replace(strFileContent, """,""", """;"""). Det efterlader mig med semikolon som global seperator - undtagen mellem kundenummer og firmanavn. Hvordan jeg så lige får den erstattet, kan jeg sgu ikke regne ud...
Avatar billede Slettet bruger
07. februar 2006 - 09:56 #10
OK...! Så vil jeg sige at kan dette her ikke lade sig gøre...

- Eller også vil din split kode blive ekstremt omfattende og den vil indeholde en uhyggelig masse if-sætninger... som ingen kan overskue... tror jeg...

- Beklager! Men jeg har ikke noget bedre forslag!

\Dan
Avatar billede madssch Nybegynder
07. februar 2006 - 10:00 #11
Helt i orden Dan - tak for kampen!  ;-)

Jeg opgiver nu ikke helt endnu...
Avatar billede cpufan Juniormester
07. februar 2006 - 10:02 #12
hvis dette er et resultat af dit export:

Kundenr,"Firmanavn","Vejnavn 2, 3. tv.","","9000 Aalborg","Danmark","","","info@domain.dk","http://www.domain.dk"

kan der laves en funktion der finder kommaet,
tester for om der er en " på hver side,
hvis der er det skal den erstattes med et andet tegn, eksempelvis ;

så du skal vel egentligt bare replace(streng,"\",\"",";")

eller hur?
Avatar billede cpufan Juniormester
07. februar 2006 - 10:04 #13
nå det skal så nok være


replace(streng,"\",\"","\";\"")
Avatar billede madssch Nybegynder
07. februar 2006 - 10:13 #14
Læs mit indlæg d. 07/02-2006 09:54:30  :-)
Avatar billede cpufan Juniormester
07. februar 2006 - 10:16 #15
den skal jo så ploppes ind der hvor du har din import, og før du gemmer i db'en,

eller er det ikke det du er på vildspor med?
Avatar billede madssch Nybegynder
07. februar 2006 - 10:27 #16
Nej, altså hvis jeg nu laver denne replace: Replace(strFileContent, """,""", """;""") så ser min tekststreng sådan ud:

Kundenr,"Firmanavn";"Vejnavn 2, 3. tv.";"";"9000 Aalborg";"Danmark";"";"";"info@domain.dk";"http://www.domain.dk"

Var det ikke for kommaet imellem Kundenr og Firmanavn, kunne jeg nu opdele mit array med semikolon, og kommaet i adressen ville ikke få nogen indflydelse. Derfor skal jeg på en eller anden vis have erstattet det første komma også...
Avatar billede morhan Novice
07. februar 2006 - 10:31 #17
Du kunne køre noget regex på den..

str = "," & "Kundenr,""Firmanavn"",""Vejnavn 2, 3. tv."","""",""9000 Aalborg"",""Danmark"","""","""",""info@domain.dk"",""http://www.domain.dk"""


Set re = New RegExp
re.Global = True
re.Pattern = "(""|,)(.*?)\1,?"

Set matches = re.Execute(str)

For Each m In matches
    Response.Write m.SubMatches(1) & "<br>"
Next
Avatar billede cpufan Juniormester
07. februar 2006 - 10:34 #18
ok, du kan jo faktisk ogsaå nøjes med at replace ,"  til ;" da der aldrig vil være en " efter et kundeudfyldt , men et mellemrum bogstav eller tal
Avatar billede madssch Nybegynder
07. februar 2006 - 10:41 #19
cpufan > Ja, selvfølgelig! Det var da bare det!  :D

morhan > Jeg må indrømme, at jeg ikke kender RegExp funktionen. Kan du uddybe den lidt? Er altid frisk på at lære noget nyt...  :)
Avatar billede cpufan Juniormester
07. februar 2006 - 10:43 #20
jov det.......
Avatar billede madssch Nybegynder
07. februar 2006 - 10:57 #21
morhan > Jeg har lige testet dit forslag, og det virker - næsten. Ved at indsætte "," før kundenr., får jeg kundenr. med i den første linje. Men tekstfilen kan i realiteten indeholde flere tusind linjer, så de resterende linjer vil mangle kundenr.
Avatar billede madssch Nybegynder
24. februar 2006 - 10:05 #22
cpufan -> Smider du et svar, så du kan få dine points?
Avatar billede cpufan Juniormester
24. februar 2006 - 10:37 #23
æhm - du har accepteret mit svar, så jeg har fået point ;D
Avatar billede madssch Nybegynder
24. februar 2006 - 10:41 #24
Hehe... I min spørgsmåloversigt her på EXP stod spørgsmålet som ikke afsluttet.

Nå, jamen så er alt jo på sin plads!  :D
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