Avatar billede Mads Larsen Nybegynder
22. maj 2009 - 14:50 Der er 8 kommentarer og
1 løsning

Indlæsning af Textfiler

Hej Eksperter

Jeg har et lille problem, når jeg vil indlæse en tekstfil ind i f.eks. excel eller word. Så vil jeg gerne have at den selv går ind og finder hvilket "format" teksten er encodet i.

Sådan som det er nu, så er alle ÆØÅ osv. "?" i Excel.

Vil gerne hvis den kunne tage "alle", eller hvad man nu skal sige. Det er ikke nok med bare et sprog.

Sådan som min kode er pt. er det bare en alm. streamreader jeg bruger til at læse teksten.

Nogen der har nogen forslag til hvordan det kan løses?
Avatar billede arne_v Ekspert
22. maj 2009 - 15:19 #1
Laes bytes i filen og tael op hvormange forekomster der er af de forskellige byte vaerdier og gaet paa Encoding udfra dette.
Avatar billede arne_v Ekspert
22. maj 2009 - 15:21 #2
Her er en implementation i C# som nemt kan konverteres til VB.NET:

    public static string Guess(string filename)
    {
        int[] freq = new int[256];
        Stream stm = new FileStream(filename, FileMode.Open, FileAccess.Read);
        int c;
        while((c = stm.ReadByte()) >= 0)
        {
            freq[c]++;
        }
        stm.Close();
        if((freq[197] + freq[198] + freq[200] +
            freq[201] + freq[203] + freq[216] +
            freq[229] + freq[230] + freq[232] +
            freq[233] + freq[235] + freq[248]) >
          (freq[133] + freq[134] + freq[136] +
            freq[137] + freq[139] + freq[152] +
            freq[165] + freq[166] + freq[168] +
            freq[169] + freq[171] + freq[184] +
            freq[195]))
        {
            return "ISO-8859-1";
        }
        else
        {
            return "UTF-8";
        }
    }
Avatar billede Mads Larsen Nybegynder
24. maj 2009 - 00:28 #3
Okay :) Må dog indrømme jeg fatter ikke meget af den smøre :/

forstår det med den læser filen, men den store "if" fatter jeg ingen ting af.
Avatar billede arne_v Ekspert
24. maj 2009 - 02:08 #4
Den tester på om der er flest af de bytes der svarer til ÆØÅ  i ISO-8859-1 eller flest af de bytes der svarer til ÆØÅ i UTF-8.
Avatar billede Mads Larsen Nybegynder
28. maj 2009 - 16:59 #5
ville det være meget dumt at man prøver at åbne dem i UTF-8 og de forskellige og så søge på ÆØÅ med en instrev? og hvis ja så bruge den metode?

eller vil det måske sløve det meget? :)
synes nemlig ikke lige jeg kan kringle den kode.
Avatar billede arne_v Ekspert
04. juli 2009 - 03:02 #6
Det kunne du godt gøre.

Jeg tror at det vil være langsommere og mere usikkert.

Men det kan godt gøres på den måde,
Avatar billede arne_v Ekspert
04. juli 2009 - 03:04 #7
Den tilsvarende VB.NET kode ser ud som:

    Public Shared Function Guess(filename As String) As String
        Dim freq As Integer() = New Integer(255) {}
        Dim stm As Stream = New FileStream(filename, FileMode.Open, FileAccess.Read)
        Dim c As Integer
        While (c = stm.ReadByte()) >= 0
            freq(c) += 1
        End While
        stm.Close()
        If (freq(197) + freq(198) + freq(200) + freq(201) + freq(203) + freq(216) + freq(229) + freq(230) + freq(232) + freq(233) + freq(235) + freq(248)) > (freq(133) + freq(134) + freq(136) + freq(137) + freq(139) + freq(152) + freq(165) + freq(166) + freq(168) + freq(169) + freq(171) + freq(184) + freq(195)) Then
            Return "ISO-8859-1"
        Else
            Return "UTF-8"
        End If
    End Function
Avatar billede arne_v Ekspert
04. juli 2009 - 03:05 #8
Og et svar fra mig
Avatar billede Mads Larsen Nybegynder
27. juli 2009 - 08:35 #9
Jeg siger mange 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