Sharon Shelton Ответов: 3

Как перечитывать конец буфера в C?


Я использую буфер для временного хранения определенных байтов данных(символов) из файла. Я просто хочу выяснить, присутствует ли в файле то или иное слово. Допустим, я ищу слово "Apple" и сохраняю строку из файла в буфер, который имеет первую половину "App" В конце буфера и "le" в следующем буфере. Я просто хочу убедиться, что эти слова не пропущены, что я могу сделать, чтобы перечитывать определенную длину в конце буфера. Как я могу изменить следующий код?

Что я уже пробовал:

while(feof(fptr)==0){
		char * result;
		char line[100];
		result = fgets( line, sizeof( line ), fptr );
	if ( result == NULL ){
        break;
   	}
   	line[strcspn( line, "\n" ) ] = '\0';
   	token = strtok(line," \t,:;\'\"\?!-_|\\><~@#$%^&*()+{}[].=1234567890");
   	while( token != NULL ) {
      	printf( " %s\n", token );
        if(strcasecmp(token,word)==0){
        	count++; //counts the number of occurrence of the word 
		}
        token = strtok(NULL," \t,:;\'\"\?!-_|\\><~@#$%^&*()+{}[].=1234567890");
   }
	}

3 Ответов

Рейтинг:
0

OriginalGriff

Воспользуйся Библиотечная функция C - fseek() - Tutorialspoint[^]

Но сколько раз мы говорили вам сейчас, что вы делаете это неправильно?


Sharon Shelton

Я не прошу код, который дает мне выход. Я прошу о чем-то эффективном. fseek() потребляет много времени программы. И только потому, что я задаю сомнения в одной и той же программе, это не значит, что я задаю те же сомнения -_- без обид

OriginalGriff

И вам уже говорили раньше: ваш подход медленный: прочитайте весь файл один раз и обработайте его в памяти на основе подсчета слов. Затем поищите эти слова.

Да, поиск может быть медленным - вот почему вы не используете его без крайней необходимости!

Рейтинг:
0

Daniel Pfeffer

Одним из способов было бы перекрытие существующего буфера со следующим буфером.

Если вы знаете, что искомая фраза имеет длину N, то при достижении конца буфера вы копируете последние N-1 символов из конца буфера в начало. Затем вы заполняете оставшуюся часть буфера из файла и возобновляете поиск в начале буфера.


Рейтинг:
0

Richard MacCutchan

Вы можете получить размер файла (из fseek/ftell) и выделите буфер, достаточно большой для всего файла. Затем считайте его в память и ищите таким образом. Кроме того, если это правильный текстовый файл, считывайте его строка за строкой, убедившись, что входной буфер достаточно велик для самой длинной строки. Ключ к успеху-попробовать несколько вещей, чтобы увидеть, что работает лучше всего.