[問題] 關於讀檔之選擇行數問題

看板C_and_CPP作者 (zeus)時間11年前 (2012/08/23 20:49), 編輯推噓2(2010)
留言12則, 5人參與, 最新討論串1/1
開發平台(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
一次讀一行時用一行的buffer 一次讀四行用四行的buffer
08/23 21:20, 2F

08/23 21:35, , 3F
一次讀完我有試過,但好像裝不下,數字有快3百萬個...
08/23 21:35, 3F

08/24 00:10, , 4F
fseek的問題是出在哪裡?你的code?
08/24 00:10, 4F

08/24 00:14, , 5F
如果每行都是固定長度, fseek()一定可以
08/24 00:14, 5F

08/24 00:15, , 6F
不是的話, 就同2樓用多個buffer + fgets()
08/24 00:15, 6F

08/24 10:24, , 7F
要不然用個array裝每行行頭的位置也OK
08/24 10:24, 7F
※ 編輯: uranuszeus 來自: 114.24.163.128 (08/24 10:58)

08/24 11:03, , 8F
solemn229大,每行都是固定長度,所以我正在重讀fseek
08/24 11:03, 8F

08/24 11:28, , 9F
可以問一下fseek只是單純移動要讀取或寫入位置嗎?
08/24 11:28, 9F

08/24 15:41, , 10F
應該是吧, 看文件是說會影響EOF還有ungetc
08/24 15:41, 10F

08/24 15:42, , 11F
另外要注意用不同方式open(text or binary), 數字可能會
08/24 15:42, 11F

08/24 15:42, , 12F
不一樣, 自己試試看
08/24 15:42, 12F
文章代碼(AID): #1GDYRhPh (C_and_CPP)