2011-12-27 48 views
0

基本上,我正在研究C中的一個小程序(再次,不是作業任務,只是一些實驗,而我離開Uni :))。我的目標是創建一個文件,其中包含大量由空格分隔的單詞,循環遍歷文件,並且每當找到空格時,將其替換爲\ n,從而創建大量單詞列表。C - 使用文本文件

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include <string.h> 
/* 
* 
*/ 
int main(int argc, char** argv) { 

char myFile[100]; 
int i; 
FILE *file; 
while(argc--) { 
    printf("%s\n", *argv++); 
} 

return 0; 
} 

非常基本的東西我到目前爲止,我下一步需要做的是採取arguement和MYFILE陣列中的捶它,這樣我可以把它作爲則fopen,或許還有另一種途徑去做這個?

除此之外,我的想法是,然後通過fgets讀取一行到數組中,循環遍歷char char,搜索'',如果找到它,替換爲\ n,然後將該行重寫爲文件。這聽起來合理,可行嗎?

問候,

和感謝!

+1

你可以(試圖)直接從'argv'打開文件:'文件=的fopen(的argv [1], 「R」);如果(文件)/ *確定!不要忘記fclose(文件); * /;' – pmg

+0

爲什麼'讀一行'步驟?難道你不能一次只讀一個字符的文件,並且在你經歷的時候用'\ n''替換''''? –

+0

我不知道有一個函數可以從文件中逐字符讀取? – PnP

回答

3

最簡單的方法是打開文件以二進制方式

FILE *fpIn = fopen(argv[1], "rb"); 

然後打開一個新的文件寫

FILE* fpOut = fopen("tmp.out", "wb"); 

,並使用fgetc從fpIn讀逐字節,並使用fputc寫新文件

在寫入之前請檢查該字節是否爲空格(使用isspace()),請改爲寫'\ n'。

然後刪除原始和重命名tmp.outargv[1]

+0

謝謝!非常感謝Anders K. – PnP

+0

np,您可能還想檢查多個空格,並用一個換行符替換它們 - 不確定文件的外觀如何。 –

0

這是非常正是ķ& [R練習1-12讓你做(你可以重定向輸入文件標準輸入或者,如果你想跳過文件指針)。這是一個很好的練習。

僅供參考,一個很好的資源在K & [R解決方案: http://clc-wiki.net/wiki/K&R2_solutions