這次作業是要利用Standard I/O的方式
實作出對於指定的檔案能進行
merge、 find 、 search功能的程式
(一) merge
./hw4 –m fileA fileB
使用者下達-m參數,並將fileA與fileB的內容作交叉合併,並將結果寫回fileA
,覆蓋原本內容,請用tmpfile()完成此功能
執行後 :
結果寫回file-A,並覆蓋file-A內容,file-B內容不變,兩檔案內容交錯排序
file-A line-1
file-B line-1
file-A line-2
file-B line-2
….
(二) find
./hw4 –f filename position
使用者下達-f參數,對第三個參數的檔名作find的功能,回傳所輸入的
position位置的字元,如輸入 ./hw4 –f fileC 10,35 之後,回傳fileC
第10行第35個字的字元,如果檔案不到10行,回傳錯誤訊息 :
“Error : line 10 doesn’t exist”。如果檔案超過10行,但是第10行找不
到第35個字元,則回傳錯誤訊息 : “Error : 10,35 doesn’t exist.
(三) search
./hw4 –s filename search-char
使用者下達-s參數,將對檔案作搜尋功能,回傳其字元所在座標
,如輸入 : ./hw4 –s fileD u ,則回傳fileD所有u字元的座標,並將
結果寫入檔案”result_file”
ex:
./hw4 -s search_file a
merge
當初寫的時候忘記說要用tmpfile()完成...@@
所以相當是重新寫一個類似的功能去完成
作法:
while(fil1 != NULL||file2 != NULL)
{
case 1: (file1 != NULL && file2 != NULL)
file1 file2存入 tempbuf
case 2:(file1 != NULL && file2 ==NULL)
file1 存入 tempbuf
case 3: (file1 == NULL && file2 !=NULL)
file2 存入 tempbuf
}
把tempbuf 覆蓋到fle1...Done!
主要是用 fgets 從檔案讀出資料(一行)
fputs 把資料寫入檔案(一行)
find
作法:
輸入位置的參數型式為 "x,y"
所以先用迴圈把x , y這兩個字元取出轉成數字
跳到指定行數 若沒有輸入的行數 跳出錯誤訊息
到指定行數後 取一行的資料
用迴圈一個一個增加offset 到指定位置
若有字元存在 印出 否則跳出錯誤訊息
search
作法:
while(欲尋找的檔案尚未結束)
{
從檔案開頭用fgetc一個字元一個字元比對
找到字元 用fprintf將位置寫入result_file
尋獲變數++
}
最後印出及寫入檔案中尋獲的字元個數
------------------------------------------------------------------------
這次作業比較沒有什麼要特別注意的地方
主要是對於file讀寫資料的功能函式運用
- Apr 23 Wed 2008 22:33
[System Programming] HW4-Standard I/O
close
全站熱搜
留言列表
發表留言