2011-12-24 35 views
3

這聽起來可能很尷尬,但我想問一下在表格數據中是否存在一種常用方式來讀取要讀取的文本文件並用C語言編寫。標準(或方便)方法來讀取表格數據並將其寫入文本文件c

與python類似,您可以通過f.readlines將全文本文件加載到數組中,然後按特定字符或字符序列(分隔符)遍歷所有行和split每行。

你如何解決C中的這個問題?

+1

我一般只使用fprintf和fscanf。爲了讀取可變長度的行,也可以使用fgets和(嵌套的if-need-be)strtok。 – jacobhaven 2011-12-24 02:27:56

+1

使用while循環和fscanf/fprintf – 2011-12-24 02:28:04

回答

1

有機制了一把,但就是爲什麼腳本語言已經成爲在至少二年來這麼紅的一個原因 - 一些在腳本語言看似簡單的任務是沉重的C.

  • 您可以使用flexbison爲您的表編寫解析器。如果格式非常好定義和「靜態」,這真的只適用。他們是令人驚歎的工具,可以做的事情遠比您想象的要多,但它是非常重要的工具,可以通過腳本語言簡單地使用split()來完成。

  • 您可以使用getdelim(3)閱讀各個字段。然而,這只是POSIX.1-2008標準,所以這遠遠不是無處不在。 (每臺有glibc的Linux機器都應該有它們。)

  • 您可以閱讀fgets(3)的行,並使用strchr(3)發現拆分位置。

  • 您可以閱讀fgets(3)的行並使用strtok(3)標記字符串。

  • 您可以使用scanf(3)來一次執行輸入和掃描;從這裏的問題看來,scanf(3)很難正確使用。

  • 您可以使用一次一個字符的解析方法:使用getc(3)讀取字符,檢查它,對它做些什麼,迭代直到沒有更多字符。

+0

@samold謝謝,那麼爲什麼沒有好的庫來做這些非常有用的字符串操作,用C編寫? – Ali 2011-12-24 03:14:42

+1

也許有 - 畢竟有成千上萬的小型庫 - 但是在哪些字段之間使用哪些分隔符的配置,以及使用字符串創建哪些數據結構可能更容易,只需手寫即可他們。 'scanf(3)'應該在這方面很有幫助,也許我在看到很多Stackers在正確使用它時遇到了麻煩之後就開始厭倦了。 – sarnold 2011-12-24 03:43:24

2

與您在任何其他語言中使用的方式幾乎相同。選擇字段分隔符(I.E.,tab字符),打開文本文件進行閱讀並解析每行。

當然,在C它永遠不會像在Python那樣容易,但方法是類似的。

2

哇。我有點困惑其他答案,讓我覺得我在Mainframes.stackexchange.com而不是stackoverflow.com

爲什麼你不選擇像JSON或XML這樣的現代數據格式,並遵循最佳實踐爲您選擇的數據格式?

如果你想要一個好的C語言JSON讀寫器,我已經使用了Jansson,它非常簡單和快速。

如果你想要一個好的C語言XML讀寫器,我使用miniXML,它也很容易和快速。還有SAX *和* DOM支持,具體取決於您想要如何讀取XML。

顯然還有其他豐富的其他庫可用。

請不要讓下一個人來支持你的程序一些古怪的自定義文件格式來處理。

+0

感謝您的建議,我會處理相當大的數據集,並且我不想陷入內存或性能問題,但我想用一個寫得很好的庫的json應該足夠好。 – Ali 2011-12-24 03:28:02

+1

而且您會對下一個用戶感興趣_XML_?不用了,謝謝。 JSON是沒問題的,我無法抱怨太多。 :) – sarnold 2011-12-24 03:39:29

+0

@ sarnold- XML絕對有它的地位 - 特別是在企業用地上,可以非常期望交付清晰定義可用和必需字段,數據類型,最大長度等的模式,並且存在成熟的開發工具鏈傳輸,處理和轉換數據。 JSON在許多情況下都非常有用 - 但它本身並不是XML的替代品。我認爲按照你們對一攬子聲明的方式進行比較並不公平。 – Steve 2011-12-24 07:07:01

2

我覺得getline()strtok()是相當方便的(getline是gnu擴展,在POSIX.1-2008中標準化)。