分享

C语言如何从指定行读取文件

 jddong 2017-02-23

http://blog.csdn.net/davebobo/article/details/51654789

在这里我们一共有三个功能,写文件,读文件,从指定行中读取文件,代码比较简单不多加解释。

  1. #include <stdlib.h>  
  2. #include <string.h>  
  3. #include <stdio.h>  
  4.   
  5. #define MAX_LENTH_OF_LINE 1024  
  6.   
  7. FILE* fptr;  
  8.   
  9. int WriteToText()  
  10. {  
  11.   
  12.     fptr = fopen("test.txt", "w");  
  13.     if (fptr == NULL)  
  14.     {  
  15.         printf("Cannot Open file for writing\n");  
  16.         return -1;  
  17.     }  
  18.     for (int i = 0; i < 3; i++)  
  19.     {  
  20.         fprintf(fptr, "%d %d %d %d %d %d \n", i + 1, i + 2, i + 3, i + 4, i + 5, i + 6);  
  21.         /* 
  22.         生成文本文件test.txt 文本内容 
  23.         1 2 3 4 5 6 
  24.         2 3 4 5 6 7 
  25.         3 4 5 6 7 8 
  26.         */  
  27.     }  
  28.     fclose(fptr);  
  29.     return 1;  
  30. }  
  31.   
  32. int ReadFromText(){  
  33.   
  34.     fptr = fopen("test.txt", "r");  
  35.     if (fptr == NULL)  
  36.     {  
  37.         printf("Cannot Open file for reading\n");  
  38.         return -1;  
  39.     }  
  40.     int a, b, c, d, e, f;  
  41.     for (int i = 0; i < 3; i++)  
  42.     {  
  43.         fscanf(fptr, "%d %d %d %d %d %d \n", &a, &b, &c, &d, &e, &f);  
  44.         printf("%d %d %d %d %d %d \n", a, b, c, d, e, f);  
  45.         /* 
  46.         控制台打印出的文本内容 
  47.         1 2 3 4 5 6 
  48.         2 3 4 5 6 7 
  49.         3 4 5 6 7 8 
  50.         */  
  51.     }  
  52.     fclose(fptr);  
  53.     return 1;  
  54. }  
  55.   
  56. int SetPositionByLine(FILE *fp, int nLine)  
  57. {  
  58.     int i = 0;  
  59.     char buffer[MAX_LENTH_OF_LINE + 1];  
  60.     fpos_t pos;  
  61.   
  62.     rewind(fp);  
  63.     for (; i < nLine; i++)  
  64.         fgets(buffer, MAX_LENTH_OF_LINE, fp);  
  65.     fgetpos(fp, &pos);  
  66.     return 0;  
  67. }  
  68.   
  69. int ReadByLine(){  
  70.   
  71.     char buffer[MAX_LENTH_OF_LINE + 1];  
  72.     FILE *fp;  
  73.     fp = fopen("test.txt", "r");  
  74.     SetPositionByLine(fp, 2);  
  75.     fgets(buffer, MAX_LENTH_OF_LINE, fp);  
  76.     printf("%s\n", buffer);  
  77.     /* 
  78.     读取第三行的内容 
  79.     3 4 5 6 7 8 
  80.     */  
  81.     fclose(fp);  
  82. }  
  83.   
  84. int splitLineStr(int strNum,char* bufIn,char* bufOut,int* bufLen){  
  85.   
  86.     int i = 0;  
  87.     int j = 0;  
  88.     int k = 0;  
  89.   
  90.     for (; bufIn[i] != 0 && j < strNum; i++){  
  91.         if (isspace(bufIn[i])){  
  92.   
  93.             if (j == 0)  
  94.             {  
  95.                 memcpy(bufOut, bufIn, i);  
  96.                 k = i + 1;  
  97.                 *bufLen = i;  
  98.             }  
  99.             else  
  100.             {  
  101.                 memset(bufOut, '\0', sizeof(bufOut));  
  102.                 memcpy(bufOut, bufIn + k, i - k);  
  103.                 *bufLen = i - k;  
  104.                 k = i + 1;  
  105.             }  
  106.   
  107.             j++;  
  108.             if (j == strNum)  
  109.             {  
  110.                 return 1;  
  111.             }  
  112.             else{  
  113.                 continue;  
  114.             }  
  115.         }  
  116.     }  
  117.   
  118.     return 1;  
  119. }  
  120.   
  121. void main(){  
  122.   
  123.     //WriteToText();  
  124.     //ReadFromText();  
  125.     ReadByLine();  
  126.     system("pause");  
  127.     return;  
  128. }  


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多