Yahoo奇摩知識+ 將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+ 網站將會轉為唯讀模式。其他 Yahoo奇摩產品與服務或您的 Yahoo奇摩帳號都不會受影響。如需關於 Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。
C語言 如何讀取資料的某一行
請問C語言 如何讀取資料的某一行
我會一次讀取所有資料進來,然後return我指定的行數
但這樣太廢時間了...有辦法一次精準的抓到,不讀取所有資料嗎?
因為我這程式會跑相當多次
謝謝
3 個解答
- 6 年前最佳解答
如果你的某行是個固定行次n
那麼
while(n>0)
{
if ( fgets (mystring , 1024 , pFile) == NULL )
break;
n--;
}
如果你的某行是經過某判斷才得知,則經fgets後做判別則可。
如果你的某行的動作是很頻繁,那建議做個index以便頻繁讀取。
例如:先記錄,
while(1)
{
fgetpos (pFile,&pos);
pFileIndexPos[n++]=pos;
if ( fgets (mystring , 1024 , pFile) == NULL )
break;
}
maxLine = n;
使用時用fseek抓取
void readFileOfLine(char *str,int line)
{
if(line +1 <= maxLine) return;//先確保不會超過範圍,當然小於0也要考量,先不打了
fseek(pFile, pFileIndexPos[line] , SEEK_SET);
fread(str, 1 , pFileIndexPos[line+1] - pFileIndexPos[line],pFIle);//要注意是否有讀取...
}
參考資料: 我 - ?Lv 66 年前
the size of BIG data is more than that of physical memory, such as 1000T bytes data.
how to access this big data in 32bit computer? , It can't whole load into memory. how to search or delete or insert data ?, google uses MAPREDUCE method and B tree index.
I uses OverlappingB+tree , R tree, Xtree, etc methods to solve big data issue.
OverlappingB+tree is access range ( 1 - 0x7FFFFFFFFFFFFFF ) records,
speed : insert about 500 times/per second, delete and search about 800 times/per second, without relation to size of data.
for examples:
圖片參考:https://s.yimg.com/rk/AC08187637/o/1355720114.jpg