13. april 2023 - 17:05 Der er 11 kommentarer og
1 løsning

Fejl i indlæsning af CSV

Har kastet mig ud i Access efter en del års pause, så er en smule rusten i det.

Jeg har en CSV fil med oplysninger på en række elever, som jeg gerne vil have indlæst i min database.

Men jeg får følgende fejl, når jeg forsøger at indlæse den:
"Tekstspecifikationens feltseparator er magen til decimalseparatoren eller tekstafgrænseren"

Opbygningen af filen er:
Elevnr,"Navn","Fornavn","Efternavn","Klasse","Kontaktgruppe","Værelse","Mobil"

Jeg har også prøvet, hvor jeg har fjernet " uden held

Jeg bruger guiden tekstimport
Avatar billede erikjacobsen Ekspert
13. april 2023 - 18:47 #1
Måske hvis du erstatter alle kommaer i filen med semikolon - altså ;
Avatar billede MSchlamovitz Mester
13. april 2023 - 18:51 #2
Som erikjakobsen - men tjek lige først at komma ikke bruges til andet end feltseparator. Typisk i adressefelter kan data indeholde et komma. Det må du lave om til et unikt tegn - fx # eller £ . Derefter erstatter du komma med semikolon. Derrefter erstatter du # eller £ med komma - og så kan du importere..
Avatar billede Slettet bruger
13. april 2023 - 19:32 #3
Fejlen, du står overfor, skyldes sandsynligvis en inkompatibilitet mellem det format, som din CSV-fil er i, og de indstillinger, du har valgt under tekstimportguiden i Access.

Her er nogle løsninger, du kan prøve:

1.    Skift feltseparator: Det ser ud til, at Access forventer et andet tegn som feltseparator end det, der bruges i din CSV-fil. Prøv at ændre feltseparatorindstillingen i tekstimportguiden til det korrekte tegn, der bruges i din CSV-fil. Dette kan være komma, semikolon eller et andet tegn, afhængigt af hvordan din CSV-fil er formateret.

2.    Skift decimalseparator: Hvis din CSV-fil bruger et tegn som decimalseparator, der er forskelligt fra det, der er indstillet i dine Windows-regionsindstillinger, kan det også forårsage fejlen. Du kan ændre decimalseparatorindstillingen i Windows-regionsindstillingerne, så den stemmer overens med det tegn, der bruges i din CSV-fil.

3.    Fjern tekstafgrænsere: Hvis din CSV-fil ikke bruger tekstafgrænsere, skal du sørge for at fjerne indstillingen for tekstafgrænsere i tekstimportguiden i Access.

4.    Kontrollér filformat: Tjek også om din CSV-fil er gemt i et kompatibelt format. Nogle gange kan en fil gemmes med et forkert format eller have en forkert filtypetilknytning, hvilket kan føre til fejl under indlæsning i Access.

Hvis du stadig står overfor problemer efter at have prøvet ovenstående løsninger, kan det være en god idé at dobbelttjekke din CSV-fils format og indhold for at sikre, at det er i overensstemmelse med de indstillinger, du har valgt i Access tekstimportguide. Du kan også overveje at åbne CSV-filen i et tekstredigeringsværktøj som Notepad++ for at se om der er nogen usynlige specialtegn eller formateringsfejl, der kan forårsage problemer.
Avatar billede Slettet bruger
13. april 2023 - 19:34 #4
Andet oplysninger som kunne løse dette?

Fejlmeddelelsen "Tekstspecifikationens feltseparator ligner decimalseparatoren eller tekstseparatoren" betyder, at den afgrænsning, du har valgt til din CSV-fil, er den samme som den decimalseparator eller tekstseparator, der er indstillet i dine regionale indstillinger . For eksempel, hvis du har sat dit decimaltegn til et komma, og du har valgt et komma som afgrænsning for din CSV-fil, får du denne fejl.

For at rette denne fejl kan du enten ændre afgrænsningen for din CSV-fil, eller du kan ændre decimalseparatoren i dine regionale indstillinger.

For at ændre afgrænsningen for din CSV-fil, kan du bruge en teksteditor til at åbne filen og ændre afgrænsningerne til noget andet. For eksempel kan du ændre kommaer til semikolon.

For at ændre decimaladskilleren i dine regionale indstillinger kan du følge disse trin:

1.    Åbn kontrolpanelet.
2.    Klik på "Region og sprog".
3.    Klik på fanen "Administrativ".
4.    Klik på "Skift systemlokalitet".
5.    Klik på fanen "Avanceret".
6.    Indtast det nye decimaltegn i feltet "Decimalsymbol".
7.    Klik på "OK".
8.    Klik på "Anvend".
9.    Klik på "OK".

Når du har foretaget disse ændringer, bør du være i stand til at importere din CSV-fil uden at få fejlmeddelelsen.

Her er nogle yderligere tips til at importere CSV-filer til Access:

§    Sørg for, at CSV-filen er i det korrekte format. Det mest almindelige format for CSV-filer er kommaseparerede værdier (CSV).
§    Sørg for, at afgrænsningerne i CSV-filen er de samme som de afgrænsninger, du har valgt i guiden Tekstimport.
§    Hvis du har problemer med at importere en CSV-fil, kan du prøve at bruge en anden teksteditor til at åbne filen og sikre dig, at afgrænsningerne er korrekte.
§    Hvis du stadig har problemer med at importere en CSV-fil, kan du prøve at bruge en anden datakilde, såsom et Microsoft Excel-regneark.
15. april 2023 - 07:55 #5
Tusind tak for alt jeres hjælp

Jeg ændrede decimaladskilleren i Windows til punktum, så kunne jeg indlæse den.

Dog er der et eller andet i CSV-filen, der ikke er lavet korrekt (prøver at gribe fat i ham, der har dannet den). Som den er nu, indlæser den de enkelte poster i en linie. Mit bud er fordi der sker en fejl med indsættelse af "
Kan se at i den originale fil er opbygningen:
"Elevnr,""Navn"",""Fornavn"",""Efternavn"",""Klasse"",""Kontaktgruppe"",""Værelse"",""Mobil"""

Den kan simpelthen ikke finde ud af det, når , står før "

Et tillægsspørgsmål:
Det bliver ikke mig, der bliver den endelige bruger af databasen, så det hele skal være så let som muligt.
Ville det (hvis jeg ikke kan få det ændret direkte i udtrækket af CSV-filen) være muligt at lave en VBA kode (eller lign), der automatisk fjerner " og ændrer , til ; og så importerer filen til databasen, når man har valgt den?
Avatar billede erikjacobsen Ekspert
15. april 2023 - 08:59 #6
At ændre decimaladskilleren i Windows kan have uønskede konsekvenser andre steder.

Og de der ""-ere er helt forkerte.

For at gøre det nemmest for modtageren af CSV-filen må du have fat i ham, der laver den. "-erne skal være i orden, og så er der grundlæggende to muligheder:

  "pi",3.14

eller

  "pi";3,14

Den nederste egner sig umiddelbart bedst til et dansk indstillet PC, da vi bruger komma til decimaladskiller, og derfor ikke kan bruge komma til feltadskiller. Standerden er så semikolon.
Avatar billede Slettet bruger
15. april 2023 - 09:01 #7
Ja, det er muligt at bruge VBA-kode eller et andet script til at ændre formatet af din CSV-fil, fjerne " og ændre , til ; og derefter importere filen til din database i Access. Der er flere måder at gøre dette på og er op til dig og hvilken du gerne vil benytte. Men husk, endeligt at lave en backup af originalen bare for at være sikker.

Her er et eksempel på, hvordan du kan gøre det:

1.    Åbn CSV-filen i Access ved hjælp af VBA-kode:

------------------
vba

Dim strFilePath As String
strFilePath = "C:\Sti\Til\Din\CSV\Fil.csv" 'Angiv stien til din CSV-fil her

DoCmd.TransferText TransferType:=acImportDelim, TableName:="DinTabelNavn", _
    FileName:=strFilePath, HasFieldNames:=True, _
    HTMLTableName:="DinCSVFil"

------------------




1.    Kør en funktion eller procedure til at ændre formatet af din CSV-fil:

------------------
vba

Function ÆndreCSVFil(strFilePath As String) As Boolean
    Dim strContents As String
    Dim strNewContents As String
    Dim intPos As Integer
   
    ' Læs indholdet af CSV-filen
    Open strFilePath For Input As #1
    strContents = Input$(LOF(1), 1)
    Close #1
   
    ' Erstat " med ingenting
    strNewContents = Replace(strContents, """", "")
   
    ' Erstat , med ;
    strNewContents = Replace(strNewContents, ",", ";")
   
    ' Gem det ændrede indhold til en ny fil
    Open strFilePath For Output As #1
    Print #1, strNewContents
    Close #1
   
    ÆndreCSVFil = True
End Function


------------------



1.    Kald funktionen ÆndreCSVFil med stien til din CSV-fil som argument, før du importerer filen i Access:


------------------
vba

Dim strFilePath As String
strFilePath = "C:\Sti\Til\Din\CSV\Fil.csv" 'Angiv stien til din CSV-fil her

' Ændre formatet af CSV-filen
ÆndreCSVFil strFilePath

' Importer filen til Access
DoCmd.TransferText TransferType:=acImportDelim, TableName:="DinTabelNavn", _
    FileName:=strFilePath, HasFieldNames:=True, _
    HTMLTableName:="DinCSVFil"

------------------



Dette er et eksempel, og du kan tilpasse koden efter dine specifikke krav og filformat. Det er dog vigtigt at huske at tage en backup af din CSV-fil, før du ændrer den, og at teste koden grundigt for at sikre, at den fungerer korrekt med dine data, før du implementerer det i din produktionsdatabase. Tre andre eksempler eller tiltag kommer snart.
Avatar billede Slettet bruger
15. april 2023 - 09:05 #8
Det andet, det er muligt at oprette en VBA-kode, der automatisk fjerner " og ændrer , til ; og derefter importerer filen til databasen, når du har valgt filen. Her er koden:

------------------
vba


Sub ImportCSV()

'Declare variables
Dim strFile As String
Dim strData As String
Dim i As Long

'Set the file path
strFile = "C:\Sti\Til\Din\CSV\Fil.csv"

'Open the file
Open strFile For Input As #1

'Read the file line by line
Do Until EOF(1)

'Read the line
Line Input #1, strData

'Remove the double quotes
strData = Replace(strData, """", "")

'Change the commas to semicolons
strData = Replace(strData, ",", ";")

'Import the data into the database
CurrentDb.Execute "INSERT INTO YourTable (StudentNumber, Name, FirstName, LastName, Class, ContactGroup, Room, Mobile) VALUES (" & strData & ")", dbFailOnError

Loop

'Close the file
Close #1

End Sub
------------------


For at bruge denne kode skal du blot kopiere og indsætte den i et nyt modul i Visual Basic Editor (VBE). Gem derefter modulet og placer markøren hvor som helst inde i koden. Tryk på F5 for at køre koden. Koden åbner automatisk CSV-filen, fjerner de dobbelte anførselstegn, ændrer kommaerne til semikolon og importerer dataene til databasen.
Avatar billede Slettet bruger
15. april 2023 - 09:07 #9
Tredje, det er muligt at oprette en VBA-kode, der automatisk fjerner " og ændrer , til ; og derefter importerer filen til databasen, når du har valgt filen. Her er koden:

------------------
vba

Sub ImportCSV()

'Set variables
Dim strCSVFile As String
Dim strFileContents As String
Dim strLine As String
Dim strStudentNumber As String
Dim strName As String
Dim strFirstName As String
Dim strLastName As String
Dim strClass As String
Dim strContactGroup As String
Dim strRoom As String
Dim strMobile As String

'Get the path to the CSV file
strCSVFile = Application.GetOpenFilename("CSV Files (*.csv), *.csv")

'If the user cancels the dialog, exit the sub
If strCSVFile = False Then Exit Sub

'Open the CSV file
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strCSVFile)

'Read the contents of the file
strFileContents = objFile.ReadAll

'Close the file
objFile.Close

'Split the file contents into lines
strLines = Split(strFileContents, vbCrLf)

'For each line in the file, do the following
For Each strLine In strLines

'Remove the quotation marks
strLine = Replace(strLine, """", "")

'Replace the commas with semicolons
strLine = Replace(strLine, ",", ";")

'Split the line into columns
strColumns = Split(strLine, ";")

'Assign the values of the columns to variables
strStudentNumber = strColumns(0)
strName = strColumns(1)
strFirstName = strColumns(2)
strLastName = strColumns(3)
strClass = strColumns(4)
strContactGroup = strColumns(5)
strRoom = strColumns(6)
strMobile = strColumns(7)

'Import the record into the database
'...

Next

'Close the file
objFSO.Close

End Sub
------------------

For at bruge denne kode skal du blot kopiere den til et nyt modul i Excel og gemme modulet. Når du derefter vil importere en CSV-fil, skal du åbne modulet og klikke på knappen "Importer CSV". Koden fjerner automatisk anførselstegnene og ændrer kommaerne til semikolon i CSV-filen, og derefter importerer den filen til databasen.
Avatar billede Slettet bruger
15. april 2023 - 09:09 #10
Sure, det er muligt at oprette en VBA-kode, der automatisk fjerner " og ændrer , til ; og derefter importerer filen til databasen, når du har valgt filen. Her er koden:

------------------
vba

Sub ImportCSV()

Dim csvFile As String
Dim csvData As String
Dim csvRow As String
Dim csvField As String
Dim i As Integer

'Get the path of the CSV file
csvFile = Application.GetOpenFilename("CSV Files (*.csv), *.csv")

'If the user did not select a file, exit the procedure
If csvFile = False Then Exit Sub

'Open the CSV file
Open csvFile For Input As #1

'Read the CSV file line by line
Do While Not EOF(1)

'Get the next line of data
Line Input #1, csvData

'Split the line of data into fields
csvRow = Split(csvData, ",")

'For each field in the line of data
For i = 1 To UBound(csvRow)

'Remove the quotation marks from the field
csvField = Replace(csvRow(i), """", "")

'If the field contains a comma, change it to a semicolon
If InStr(csvField, ",") > 0 Then
csvField = Replace(csvField, ",", ";")
End If

'Next i
Next i

'Import the line of data into the database
CurrentDb.Execute "INSERT INTO tablename (field1, field2, field3, ...) VALUES (" & Join(csvRow, ", ") & ")", dbFailOnError

Loop

'Close the CSV file
Close #1

End Sub
------------------


For at bruge denne kode skal du blot kopiere og indsætte den i et nyt modul i Excel. Gem derefter modulet og placer markøren hvor som helst i koden. Tryk på F5 for at køre koden. En dialogboks vises, så du kan vælge den CSV-fil, du vil importere. Når du har valgt filen, vil koden automatisk fjerne anførselstegnene og ændre kommaerne til semikolon i CSV-filen. Koden vil derefter importere dataene til databasen.

Jeg håber det hjælper! 🤓🙃👍
Avatar billede Slettet bruger
15. april 2023 - 09:09 #11
Hopper af tråden 🙂
15. april 2023 - 09:18 #12
Tusind tak for din hjælp
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

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