Как прочитать последнюю, но одну строку из файла? - PullRequest
0 голосов
/ 14 марта 2011

Я создаю приложение, которое должно получать данные из текстовых файлов. Проблема в том, что данные, которые мне нужны, находятся в последней, но одной строке в текстовом файле. Есть ли способ прочитать последнюю, кроме одной строки, как-нибудь? Мне нужен только последний, но одна строка контента. Может ли кто-нибудь помочь мне?

Спасибо

Ответы [ 2 ]

1 голос
/ 14 марта 2011

Прочитать весь файл, сохранив две строки, затем отбросить последнюю, например:

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

int secondtolast(char *dst, size_t maxlen, FILE *h) {
  char *line[2];
  int i = 0;

  line[0] = malloc(maxlen);
  if (!line[0]) return 1;
  *line[0] = 0;
  line[1] = malloc(maxlen);
  if (!line[1]) {
      free(line[0]); /* return memory to the OS */
      return 1;
  }
  *line[1] = 0;

  while (fgets(line[i], maxlen, h)) i = !i;
  strcpy(dst, line[i]);

  free(line[0]);
  free(line[1]);

  return 0;
}

int main(void) {
  char l2[8192];
  if (secondtolast(l2, sizeof l2, stdin)) {
    fprintf(stderr, "no memory");
  }
  printf("second to last line: %s", l2);
  return 0;
}
1 голос
/ 14 марта 2011

Вот быстрый и грязный код.Он читает все строки, чтобы получить количество всех строк, перематывает файл в начало и снова читает строки до последних, кроме двух.Наконец, последняя, ​​кроме одной строки, читается и сохраняется в переменной lastLineButOne.

#include <stdio.h>
#define BUF 255

int getNoOfLines(FILE *f) {
    int ctr=0;
    char temp[BUF];
    while(fgets(temp,BUF,f) != NULL)
        ctr++;
    return ctr;
}

int main() {
    int i;
    FILE *f=fopen("apps.txt","r");
    char lastLineButOne[BUF];
    char temp[BUF];
    int noOfLines=getNoOfLines(f);
    rewind(f);
    for(i = 0; i < noOfLines-2; i++) {
        fgets(temp,BUF,f);
    }
    fgets(lastLineButOne,BUF,f);
    printf("%s",lastLineButOne);
    fclose(f);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...