Avatar billede gulbaek Nybegynder
22. maj 2005 - 19:39 Der er 3 kommentarer og
2 løsninger

Læsning af sidste linje i en fil

Hejsa er der en smart måde at læse den sidste linje i en fil, skal bruge det til et lille program jeg har lavet der finder primtal, og vil egentlig gerne have at den kan fortsætte hvor den stoppede sidst. dvs. læser sidst fundne primtal og fortsætter derfra.

Ved godt at jeg bare kan lade den læse hele filen igennem, men det må da være muligt kun at læse den sidste linje.

Mvh
Anders Gulbæk
Avatar billede arne_v Ekspert
22. maj 2005 - 19:54 #1
Det kan ikke gøre spå nogen pæn måde.

Men man kan jo lave noget direct access til slutnimngen af filen og søge baglænse
efter et linieskift.

Noget hurtigt kode:

using System;
using System.IO;
using System.Text;

class MainClass
{
    public static string ReadLastLine(string fnm)
    {
        FileStream fs = new FileStream(fnm, FileMode.Open, FileAccess.Read);
        long l = fs.Length;
        int n = 1000;
        long ix = l - n;
        if(ix < 0)
        {
            n = n + (int)ix;
            ix = 0;
        }
        fs.Seek(ix, SeekOrigin.Begin);
        byte[] b = new byte[n];
        fs.Read(b, 0, n);
        fs.Close();
        int nl = n - 2;
        while(nl > 0 && b[nl] != '\n') nl--;
        nl++;
        return Encoding.Default.GetString(b, nl, n - nl);
    }
    public static void Main(string[] args)
    {
        Console.WriteLine(ReadLastLine(@"C:\test.txt"));
    }
}
Avatar billede nielle Nybegynder
22. maj 2005 - 19:55 #2
En alternativ løsning på dit problem, kunne jo være at skrive dit sidste resultat til en separat fil. Så kan du altid læse den ene linje i denne fil for at få at vide hvor du skal starte fra næste gang.

Hvad angår dit sidste spørgsmål; Du kan vist ikke gøre det hvis det er en tekst fil du skriver ti. Hvis det derimid var en binær fil så er det ikke noget problem. Med "binær fil" menes en fil hvor dine primtal f.eks. gemmes på deres binære form som Int64. I dette tilfælde er det en let sag at aflæse filens længde og så med denne viden hoppe til den sidste post.
Avatar billede gulbaek Nybegynder
22. maj 2005 - 22:22 #3
undskyld jeg ikke lige har svaret tilbage med det samme, men kom lige igang med lidt andet.
Men takker for hjælpen, smider i ikke begge et svar så jeg kan fordele point's lidt.
Avatar billede arne_v Ekspert
22. maj 2005 - 22:24 #4
ok
Avatar billede nielle Nybegynder
23. maj 2005 - 08:11 #5
Svar :^)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Nye kolleger søges til IT Stab i Forsvaret

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Teknisk systemansvarlig / ingeniør inden for taktisk datalink

Netcompany A/S

Test Consultant

Everllence

Software Engineer