2014-01-23 7 views
-3

Вот моя проблема, мне нужно прочитать определенные данные из текстового файла. Как?Как читать определенные данные из текстового файла в C

Например: "test1.txt" есть некоторые данные, такие как

IEEEXtreme 2008 издание будет проходить 8 марта 2008

И у меня есть "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; 
} 

i wan't, чтобы сделать это только чтение из строки.

+0

Что вы разработали до сих пор? – legends2k

+0

Я вытащу код, но это может быть немного плохо ... если вы найдете простой способ, не стесняйтесь публиковать сообщения. – user3227401

+1

Пожалуйста, поделитесь этим кодом. – fritzone

ответ

0

Прочитайте линию (fgets) (магазин в p), затем strstr в p для "2008" (магазин в p1) и еще один для "место" (магазин в p2), между ними (от p1 + strlen("2008") до p2) является что вам нужно ...

EDIT после просмотра источника (обзор кода: P не обзор алгоритма)

в ler_pc:

  1. не возвращают локальную переменную, вместо того, чтобы выделить память и вернуться, что (malloc, calloc) (Не забудьте освободить его (на стороне вызывающего абонента), когда сделано с ним)
  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. Пожалуйста, используйте последовательный отступ Это избавит вас от многих ошибок и сделаете человек хотят читать ваш код.
  2. Всегда бесплатно, что вы выделяете :)

второе редактирование для второго Sourc е

Для этого конкретного случая:

p1 = strstr(str,"is"); возвращает указатель, который будет указывать на первый is в строке ... то есть: 3-го символа («Это» содержит «есть») ... так что, возможно, вы хотите " 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

в то время как (! (р = fgetc (FP)) = EOF) \t p1 = strstr (р, "2008") \t p2 = strstr (p, «2009») \t printf ("% c",); printf ("\ n"); это что-то вроде этого? – user3227401

Смежные вопросы