09. januar 2012 - 09:41Der er
4 kommentarer og 1 løsning
æ ø og å ved læsning af csv fil
Hej,
Jeg har forsøgt mig med, hvad Janus gav mig i eksempel for at skrive til en csv fil (som virker nu), til at gøre det samme, når jeg læser fra en csv. Men af en eller anden grund, så læser den bare ikke æ, ø og å.
Min csv fil ser ud som følgende (åbnet med notepad): 1000,Louise JensenæÅ,1,1234,Ja 1001,Jens Peter Lyngby Hansen,1,1234 1002,Lars Nielsen,2,1234,Nej 1003,JesperJørgensen,1,1234 1005,Kenneth Schmidt,2,1234
Og min metode til at indlæse det til en datatable:
DataTable table = null;
if (fileName != null && !fileName.Equals(string.Empty) && File.Exists(fileName)) { try { FileInfo info = new FileInfo(fileName); string tableName = info.Name;
List<string> rows = new List<string>();
using (var reader = new System.IO.StreamReader(fileName, Encoding.UTF8)) { string record = reader.ReadLine(); while (record != null) { rows.Add(record); record = reader.ReadLine(); }
List<string[]> rowObjects = new List<string[]>();
int maxColsCount = 0; foreach (string s in rows) { string[] convertedRow = s.Split(new char[] { separator }); if (convertedRow.Length > maxColsCount) maxColsCount = convertedRow.Length; rowObjects.Add(convertedRow); }
table = new DataTable(tableName); for (int i = 0; i < maxColsCount; i++) { table.Columns.Add(new DataColumn()); }
foreach (string[] rowArray in rowObjects) { table.Rows.Add(rowArray); } table.AcceptChanges(); } } catch { throw new Exception("Fejl i læsningen af filen. Filen er muligvis åbnet i et andet program."); } } else { throw new FileNotFoundException("Filen blev ikke fundet."); } return table;
Når jeg laver en "run to curser", kan jeg se at i
string record = reader.ReadLine();
så har den ændret æÅ til to spørgsmålstegn: "1000,Louise Jensen��,1,1234,Ja"
Nogen der kan fortælle mig hvad det er jeg gør forkert?
Det er korrekt - men i mit tilfælde er det sådan, at jeg ikke har nogen som helst indflydelse på filen. Det er en fil, som et andet program genererer (og nej lige nu, jeg er ikke engang sikker på, at den gemmer det i ANSI format).
Det jeg tænker på er, er der en måde at konvertere på (når jeg engang får at vide, hvilket format programmet gemmer i) i mit program så jeg altid får vist det som UTF8 (og dermed får mine æ, ø og å'er vist korrekt)?
i linien using (var reader = new System.IO.StreamReader(fileName, Encoding.UTF8))
skal du indsætte den encoding din fil er gemt i. Der er desværre ikke nogen auto detection af encoding så du bliver nødt til finde ud af din encoding først. hvis du prøver at gemme filen fra notepad mener jeg den vil defaulte til den oprindelige encoding og du kan se det der.
Det har du fuldstændig ret i man kan....Mit problem er bare, at ovennævnte skulle køre pr. automatik. Der er ikke andet for, at jeg må forlange at de encoder ens hver gang, så jeg er klar over hvilken format de kører.
Du kunne evt. prøve at søge filen igennem for bestemte bytekombinationer, men du må nok alligevel acceptere en fejlrate.
Du kan forøvrigt heller ikke være garanteret at din csv er komma separeret, den kan f.eks. sagtens være semikolon separeret.
Men at kræve den samme encoding hver gang virker ikke som et urimeligt krav
Synes godt om
Ny brugerNybegynder
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.