[問題] 關於讀檔之選擇行數問題
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Dev-C(C語言)
問題(Question):
我已經把一堆數字寫進txt檔,現在要把他讀出來,只是讀的方式並非一行接著一行讀,
而是選擇指定行數讀取,我舉個例子好了,現在我的txt裡面已有
第1行 0 0 0 0
第2行 1 1 1 1
第3行 0 0 0 0
第4行 1 1 1 1
現在我要分別讀取1&3行並和在一起做輸出,2&4行也是如此,所以結果就是這樣
第1行 0 0 0 0 0 0 0 0
第2行 1 1 1 1 1 1 1 1
請問有什麼方法可以達成?有在網路上找到用fseek(),fread()方式"似乎"可以,但我
沒試出來就是了= =
這是我後來寫的...
#include<stdio.h>
int main(int argc, char** argv)
{
FILE *fPtr1;
FILE *fPtr2;
fPtr1 = fopen("abc.txt","r"); \\讀取abc.txt
fPtr2 = fopen("xyz.txt","w"); \\寫入xyz.txt
int buf[96];
int subrow[96];
int j,k,c=0; \\c為要讀取之行數
for(j=0;j<0+c;j++){
fscanf(fPtr1,"%[^\n]\n",&buf);
}
for(k=0;k<96;k++){
fscanf(fPtr1,"%d",&subrow[k]);
fprintf(fPtr2,"%d",subrow[k]);
}
fprintf(fPtr2,"\n");
fclose(fPtr1);
fclose(fPtr2);
system("pause");
return 0;
}
以上可以讀到指定c行的資料,c=0表讀取第一行,只是我現在要每隔96行讀取資料並寫入
xyz.txt,所以我想說再用for包起來,變成以下
#include<stdio.h>
int main(int argc, char** argv)
{
FILE *fPtr1;
FILE *fPtr2;
fPtr1 = fopen("abc.txt","r");
fPtr2 = fopen("xyz.txt","w");
int buf[96];
int subrow[96];
int j,k,c;
for(c=0;c<96*24;c+=96){ \\從0開始每隔96行讀一次並寫入
for(j=0;j<0+c;j++){ 目前只讀取到96*24行
fscanf(fPtr1,"%[^\n]\n",&buf);
}
for(k=0;k<96;k++){
fscanf(fPtr1,"%d",&subrow[k]);
fprintf(fPtr2,"%d ",subrow[k]);
}
fprintf(fPtr2,"\n");
}
fclose(fPtr1);
fclose(fPtr2);
system("pause");
return 0;
}
但是很奇怪的是,改成這樣寫入xyz.txt只有前兩行是正確的,接下來的22行都不知道是
讀到abc.txt的哪一行...若用一開始的code給定c=96*x可以正確讀到第c行,可是加入for
就會有錯一.一
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.24.161.163
→
08/23 21:15, , 1F
08/23 21:15, 1F
→
08/23 21:20, , 2F
08/23 21:20, 2F
→
08/23 21:35, , 3F
08/23 21:35, 3F
→
08/24 00:10, , 4F
08/24 00:10, 4F
推
08/24 00:14, , 5F
08/24 00:14, 5F
→
08/24 00:15, , 6F
08/24 00:15, 6F
→
08/24 10:24, , 7F
08/24 10:24, 7F
※ 編輯: uranuszeus 來自: 114.24.163.128 (08/24 10:58)
→
08/24 11:03, , 8F
08/24 11:03, 8F
→
08/24 11:28, , 9F
08/24 11:28, 9F
推
08/24 15:41, , 10F
08/24 15:41, 10F
→
08/24 15:42, , 11F
08/24 15:42, 11F
→
08/24 15:42, , 12F
08/24 15:42, 12F