跳轉到內容

程式設計基礎/從文字檔案載入陣列

來自華夏公益教科書,開放書籍,開放世界

從文字檔案載入陣列需要幾個步驟,包括:開啟檔案、讀取記錄、解析(分割)記錄到欄位、將欄位新增到陣列以及關閉檔案。可以一次讀取整個檔案,然後解析或逐行處理。陣列必須與檔案中記錄的數量一樣大,或者必須動態生成。

從檔案載入陣列呈現了一個有趣的困境。問題圍繞著你應該在陣列中規劃多少個元素。假設是 100,但是如果檔案少於或多於 100 個值怎麼辦?程式如何正確處理?

或者

  1. 讀取檔案並計算記錄數量。
  2. 建立一個指定大小的靜態陣列。
  3. 再次讀取檔案並將每個記錄新增到陣列。

或者

  1. 讀取檔案並將記錄動態新增到陣列。

處理記錄

[編輯 | 編輯原始碼]

有兩種檔案處理選項

  1. 將整個檔案讀入記憶體,分割記錄,然後處理每個記錄。
  2. 逐行讀取檔案並一次處理一條記錄。

哪種方法更好將取決於檔案的大小以及你的程式語言支援的檔案和字串處理型別。對於小檔案,一次讀取整個檔案可能更快。非常大的檔案必須逐行處理。

處理欄位

[編輯 | 編輯原始碼]

處理欄位需要根據給定的檔案格式分割記錄。例如,逗號分隔值檔案可能格式化為

Celsius, Fahrenheit
0.0,32.0
1.0,33.8
2.0,35.6

第一行包含用逗號分隔的欄位名。接下來的幾行包含每個欄位的值,並用逗號分隔。請注意,所有文字檔案輸入都是字串。每行必須以欄位分隔符(逗號)分割,然後數字欄位必須轉換為整數或浮點數以進行處理。

虛擬碼

[編輯 | 編輯原始碼]

靜態陣列處理

[編輯 | 編輯原始碼]
Open file
Read header
While Not End-Of-File
    Read line
    Increment record count
Close file

Declare array with length based on record count
Read Header
While Not End-Of-File
    Read line
    Split line into field(s)
    Convert numeric values to numeric data types
    Add field(s) to array or parallel arrays
Close file

動態陣列處理

[編輯 | 編輯原始碼]
Declare empty array
Open file
Read Header
While Not End-Of-File
    Read line
    Split line into field(s)
    Convert numeric values to numeric data types
    Add field(s) to array or parallel arrays
Close file

關鍵詞

[編輯 | 編輯原始碼]
動態記憶體
與本地範圍關聯的堆疊建立記憶體。
解析
分割
靜態記憶體
與全域性範圍關聯的資料區記憶體。

參考文獻

[編輯 | 編輯原始碼]
華夏公益教科書