2014-01-23 188 views
-3

這是我的問題,我必須從文本文件中讀取某些數據。怎麼樣?如何從文本文件中讀取某些數據C

例如: 「test1.txt的」 有一個像

IEEEXtreme 2008年版的一些數據將發生在2008年3月8日

,我有 「keyword.txt」 有:

2008地方

我必須從單詞「2008」到「地方」單詞的文本。

////////////////////////

讓我們把這個簡單的... 你能幫我解決這個問題嗎?

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char str[] ="This is a simple string"; 

    char * p1,* p2; 

    p1 = strstr(str,"is"); 
    p2 = strstr(str,"string"); 


    puts (str); 
    system("Pause"); 
    return 0; 
} 

我不想讓這隻讀取是字符串。

+0

到目前爲止,你做了什麼? – legends2k

+0

我會提取我的代碼,但它可能有點不好...如果您發現一個簡單的方法隨時發佈。 – user3227401

+1

請分享代碼。 – fritzone

回答

0

讀線(fgets),然後strstrp(在p店)爲 「2008」(在p1店),另一種爲 「地方」(店p2),它們之間的(從p1 + strlen("2008")p2)是你需要什麼......看到源後

EDIT(代碼審查:P不是算法綜述)

ler_pc

  1. 沒有返回局部變量,而不是分配內存並返回(malloccalloc)(不要忘了釋放它(在主叫側)時,用它做)
  2. 如果文件大於60個字節可能你的應用程序會崩潰。將最大大小放到您想要閱讀的行。
  3. 如果使用calloc來分配內存,則不需要將終結器置零字節。或... char str[60] = {0}可能工作太,這取決於你的編譯器

ler_frases

  1. 可能,你希望p1[aux] = '\0'走出循環,這是沒有意義的設置它每次爲零(或從上面看到編號3)。同爲p2 ...
  2. 第一次,在strcmp(palavra, p1)palavra沒有初始化,所以你不知道:(也許你想要一個do ... while循環,而不是一段時間。
  3. 出formaility的裏面有什麼了嗎, strcmp(palavra, p1) == 0可以寫成!strcmp(palavra, p1)
  4. 開始時不分配excerto因爲您沒有使用它,所以沒有意義。
  5. while ((cntrl = 1)可能你的意思==(同爲零部分)
  6. sizeof(excerto)始終是一個指針的大小,而不是字符串的長度。 strlen()給你的字符串的長度。

main

  1. 如果你在Linux上,pause!= PAUSE運行此!= Pause,當談到關於system
  2. 你愉快地運行,即使這些文件未找到應用程序:(

一般:

  1. 請使用一致的縮進這將節省你很多的bug,並會使人想讀你的代碼。
  2. 總是免費的你分配:)

第二編輯第二源碼Ë

對於這個特定的情況下:

p1 = strstr(str,"is");將返回一個指針,該指針將指向第一is字符串中...即:第三個字符(「這」包含「是」)...所以可能你想" is"

p2 = strstr(str,"string");會給你的指針指向字符串。

現在,你需要做的是這樣的:

/* allocate enough memory for the string between " is" and "string" */ 
size_t len = p2 - p1 + strlen(" is") + 1; 
char* between = (char*)(calloc(len, sizeof(char)); 

/* and copy out the string from the original*/ 
strncpy(between, p1 + strlen(" is"), len); 

所以現在between你有需要的字符串(我希望我理解你想要正確的)。 PS:放回原來的代碼,其他人可能會從中學到東西。

+0

你能爲我做一個示例代碼嗎?請感謝 – user3227401

+2

對不起,沒有代碼,只有解釋......你需要學習:P – fritzone

+0

而(!(P =龜etc(FP))= EOF) \t P1 =的strstr(P, 「2008」) \t P2 = strstr(p,「2009」) \t printf(「%c」,); printf(「\ n」); 這是這樣的? – user3227401