我有其中一些字段被設置在下面的方式中提到的配置文件:如何在C中存儲配置文件中的動態分隔字段?
;
Student Name; Enroll. No.; Std; Age
其中第一行講述定界符和第二行示出了由上述的分隔符分隔的字段。字段是動態的,因爲它是一個配置文件。
分隔符可以是/; /: 字段不在固定編號中。 字段名稱將隨場景而改變。 根據字段輸入文件數據將被格式化
我必須使用C代碼來理解這個配置文件。請在這裏指導我
我有其中一些字段被設置在下面的方式中提到的配置文件:如何在C中存儲配置文件中的動態分隔字段?
;
Student Name; Enroll. No.; Std; Age
其中第一行講述定界符和第二行示出了由上述的分隔符分隔的字段。字段是動態的,因爲它是一個配置文件。
分隔符可以是/; /: 字段不在固定編號中。 字段名稱將隨場景而改變。 根據字段輸入文件數據將被格式化
我必須使用C代碼來理解這個配置文件。請在這裏指導我
我會用一些C提示在算法上描述一種方法。您可以嘗試用C來實現這一點細節:
讀取配置文件的第一行到一個字符串緩衝區,第一個字符存儲到delimiter
變量(注:這是假定當然了的這條線的第一個字符是你想要的)。
讀取配置文件的第二行到字符串緩衝區,並使用strtok
並保存在步驟1作爲字符串的分隔符的delimiter
,從該行讀取每個列名,將它們複製到列的陣列名稱(注意:你可以有一個char *
的數組,其固定的最大數量的元素,並按照動態分配每個字符串內存,從strtok
給出的指針複製字符串)。在此步驟中,記錄您記錄的列數,。
打開並逐行讀取數據文件。您可以在這裏使用strtok
並使用任何所需的方法對每個字符串項目進行操作。由於你的配置文件並不指明數據類型,所以你需要假定它們都是字符串,除非你想根據某些列名作出假設。
這是一個基本的方法。您可以在錯誤檢查和一般內務處理中填寫空白(在適當的情況下關閉文件等)。
感謝算法,最後一個標記包含\ n作爲字符串的一部分。我怎樣才能從緩衝區中消除它? – SeasonedNoob
@ user1517650您可以傳入一串分隔符,因此將與'\ n''並置的'delimiter'作爲兩個字符的字符串作爲'strtok'的分隔符集合使用。 – lurker
緩衝字符串的範圍是什麼?我有一個全局雙指針來保存字段,因爲它們在循環中遇到一個函數。從函數返回後,字段的最後一個元素(即字段[3])在文件打開後變得越界。而如果我使用malloc而不是引用緩衝區,它可以正常工作。那麼這是否意味着緩衝的字符串或字符串文字的範圍就在它所定義的範圍內? – SeasonedNoob
你能解釋一下「動態」是什麼意思嗎?你的意思是字段的數量和意義可能會改變嗎?這是否意味着第二行實際上是字段名稱列表,然後第三行及其後的字段實際上是與這些字段對應的數據? – lurker
是的,字段和字段名稱的數量會隨着您的配置而改變。還有另一個帶有輸入數據的文件,用相同的分隔符分隔。我們還需要檢測輸入數據中的不規則性,但我們可以稍後再做。 – SeasonedNoob