Avatar billede netro Nybegynder
21. maj 2005 - 10:54 Der er 7 kommentarer og
1 løsning

Læs en tekstfil bagfra

Jeg har brug for at kunne læse X antal linier i en tekstfil bagfra. Hvordan er det lettest at gøre?
Jeg tænkte på at opsamle alle linierne i et array, men jeg ved ikke, hvor meget plads jeg skal allokere (antal linier), før jeg har løbet den i gennem.

char temp[15];
ifstream in(path, ios::in);
while(!in.eof())
  in.getline(temp, sizeof(temp));
Avatar billede arne_v Ekspert
21. maj 2005 - 11:54 #1
du kan vel lave:

char line[X][100]

in ix = 0;
while(!in.eof())
{
    in.getline(line[ix],100);
    ix = (ix + 1) % X;
}
Avatar billede arne_v Ekspert
21. maj 2005 - 11:55 #2
alternativt kan du på DOS/Windows/Unix/Linux systemer lave et hack i stil med dette
her som finde den sidste linie:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stat.h>

#define N 5120

static char retbuf[1024];

char *get_last_line(char *fnm)
{
  FILE *fp;
  struct stat st;
  char tmpbuf[N];
  int ix,len,bufix;
  stat(fnm, &st);
  len=st.st_size<N?st.st_size:N;
  ix=st.st_size-len;
  fp=fopen(fnm,"rb");
  fseek(fp,ix,SEEK_SET);
  fread(tmpbuf,len,1,fp);
  fclose(fp);
  bufix=len-1;
  while((tmpbuf[bufix]!='\n')&&(bufix>0)) bufix--;
  memcpy(retbuf,tmpbuf+bufix,len-bufix);
  retbuf[len-bufix]='\0';
  return retbuf;
}

int main(int argc,char *argv[])
{
  printf("last line is = %s\n", get_last_line("z.log"));
  exit(0);
}
Avatar billede netro Nybegynder
21. maj 2005 - 17:17 #3
Mange tak. Jeg brugte dit forslag med mod.

Men hvis jeg bruger et array af strings i stedet, hvordan får jeg så returneret alle elementer i arrayet som én string?
Avatar billede arne_v Ekspert
21. maj 2005 - 17:23 #4
prøv:

string all = "";
for(int i = ix; i < ix + X; i++)
{
    all = all + line[i % X];
}
Avatar billede netro Nybegynder
21. maj 2005 - 17:26 #5
Okay, jeg tænkte nu mere på, om der var en måde at gøre det på uden en løkke.
Avatar billede arne_v Ekspert
21. maj 2005 - 17:30 #6
det kan jeg ikke rigtigt se nogle muligheder for
Avatar billede netro Nybegynder
21. maj 2005 - 17:34 #7
Det gør heller ikke noget. Du må gerne lægge et svar.
Avatar billede arne_v Ekspert
21. maj 2005 - 17:37 #8
kommer her
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