如何读取和打印数据结尾issuance.csv文件?

时间:2015-04-27 17:30:50

标签: c

我需要在文件末尾读取数据存储并打印它。 我的输入文件有很多数字,我必须读取最后一个数字, 谁能帮助我?

int main()
{
    FILE *fp;
        fp = fopen("f:\\Issuance.csv", "a");
        if (!fp)
        {
            printf("can not open file \n");
            getchar();
            exit(1);
        }
        int Size = 30;
        char FileInfo[100];
                fseek( fp , 0 , SEEK_END);
                fread(FileInfo, 1, Size, fp);
                printf("%d",FileInfo);
}
fcloseall();
            }

2 个答案:

答案 0 :(得分:1)

您需要使用fseek()的第二个参数。

fseek(fp, -Size, SEEK_END);
fread(FileInfo, 1, Size, fp);
FileInfo[Size] = '\0'; // NULL terminate FileInfo; or declare as char FileInfo[100] = {0};
printf("%s", FileInfo);

答案 1 :(得分:1)

要读取文本文件中的 last 号码(之后可能还有其他垃圾),从头开始,尝试读取一个号码。如果成功,请保存,否则抛出1 char。继续,直到文件结束。

// Read last number
int ReadLastNumber(FILE *inf, int default_value) {
  int last = default_value;
  int num;
  int cnt;
  rewind(inf);
  while ((cnt = fscanf(inf,"%d", &num)) != EOF) {
    if (cnt == 1) {
      last = num;
    } else {
      fgetc(inf);  // toss non-numeric char
    }
  }
  return last;
}

更合理的解决方案是fseek()到最后,向后搜索数字。找到一些数字后,继续向后查找数字+-。类似于以下未经测试的代码。

#include <ctype.h>
#include <stdbool.h>
#include <stdlib.h>

// Read last number
int ReadLastNumber2(FILE *inf, int default_value) {
  int last = 0;
  int place = 1;
  bool digit_found = false;
  long offset = -1;
  while (fseek(inf, offset, SEEK_CUR) == 0) {
    int ch = fgetc(inf);
    if (ch == EOF)  // Likely I/O error
      return default_value;
    if (isdigit(ch)) {
      digit_found = true;
      last += (ch - '0')*place;
      place *= 10;
      offset = -2;
    } else if (ch == '-') {
      return -last;
    } else if (digit_found) {
      return last;
    }
  }
  return default_value;
}

不受int溢出保护。