输出一个文件的最后n行数据,如果文件总行数不足n行,则显示全部数据
生活随笔
收集整理的這篇文章主要介紹了
输出一个文件的最后n行数据,如果文件总行数不足n行,则显示全部数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C程序,功能如題,代碼如下:
/*功能:輸出一個文件的最后n行數據,如果文件總行數不足n行,則顯示全部數據基本思路:產生一個長度為n的二維數組,將它作為一個循環隊列來看待 */#include <stdio.h> #include <stdlib.h> #include <string.h>#define BUFLEN 256// 顯示一個文件的最后len行數據 void run(char *filename, int len) {int i;char **buf = NULL;char temp[BUFLEN] = {0};FILE *fp;buf = malloc(len * sizeof(char*));for(i = 0; i < len; i++){buf[i] = (char*)malloc(BUFLEN * sizeof(char));memset(buf[i], 0, BUFLEN * sizeof(char)); // 清零}if((fp = fopen(filename, "r")) == NULL){printf("open file [%s] failed\n", filename);}else{i = 0;int lineCount = 0; // 文件的實際行數while(fgets(temp, BUFLEN, fp) != NULL){strcpy(buf[i], temp);i = (i + 1) % len; lineCount++; // 數據行數加1}printf("lineCount = %d\n", lineCount);if(lineCount <= len) // 文件實際行數小于等于需要提取的行數{for(i = 0; i < lineCount; i++)printf("L%d: %s", i+1, buf[i]);}else{int start = i;do {printf("L%d: %s", i, buf[i]);i = (i + 1 + len) % len;} while (i != start);}}fclose(fp);for(i = 0; i < len; i++)free(buf[i]);free(buf); }int main(int argc, char *argv[]) {if(argc < 3){printf("Usage: %s <filename> <n>\n", argv[0]);}else{int n = atoi(argv[2]);run(argv[1], n);printf("\n");}return 0; }
運行結果:
?
總結
以上是生活随笔為你收集整理的输出一个文件的最后n行数据,如果文件总行数不足n行,则显示全部数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 给初学者的 RxJava2.0 教程 (
- 下一篇: java jpg转换成pdf格式_Jav