這次作業是要利用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讀寫資料的功能函式運用





arrow
arrow
    全站熱搜

    molimomo 發表在 痞客邦 留言(0) 人氣()