Файлы, задано n ключевых слов
Задано n ключевых слов. Разработать програму, которая
- Создает текстовый файл TF1 с символьными рядами разной длины в которой слова разделены пробелами.
- Читает вместимое файла TF1 и записывает в файл TF2 Только те ряды в которых есть хотя бы одно ключевое слово(если таких нет, в файл TF2 Помещается оповещение об этом.
- Читает вместимое файла TF2 И печатает его по рядам
Вот мой код:
#include <stdio.h>
#include <string.h>
#include <string.h>
FILE *TF1, *TF2;
int i=1;
input(){
char a[300];
gets(a);
fputs(a,TF1);
memset(a, 0, 300);
printf("\n 1 - Next row || 2 - End rows ");
scanf("%d",&i);
fputs(" ",TF1);
}
void main(){
int j=0,k=0,flag=0,st=0;
char a[300],*b,h,word[300]="ipsum";
TF1 = fopen("TF1.txt","w");
input();
while (i==1){
fputs("\n",TF1);
scanf("%d",h);
input();
}
fclose(TF1);
TF1 = fopen("TF1.txt","r");
TF2 = fopen("TF2.txt","w");
if (TF1 == NULL) perror ("Error opening file");
else {
while (!feof(TF1))
{
if(fscanf (TF1, "%s", a)!= 1)
{
perror("File is empty");
return -1;
}
wordsearch(a);
if(!strcmp(a, word))
{
printf("%s\n", a); st++;
}
}
if(!st) puts("The word was not found");
b=strtok(a,"0");
if(b==0)fprintf(TF2,"No selected words");
while (b!=0){
fprintf(TF2,"%s\n",b);
b=strtok(0,"0");
}
memset(a, 0, 300);
fclose (TF2);
}
TF2=fopen("TF2.txt","r");
int X=0;
while (!(feof(TF2)))
fscanf(TF2,"%c",&a[X++]);
printf("Main Words:\n");
puts(a);
}
void wordsearch(char* w)
{
int i = strlen(w), st = 0;
char *ch = w;
while(i)
{
if(isalpha(*(w + i)))
break;
i--;
}
*(w + i + 1) = '\0';
while(*w)
{
if(isalpha(*w)) st = 1;
if(st)
*(ch++) = *w ;
w++;
}
*ch = '\0';
}
Проблема в том, что он не записывает мне в файл TF2 Ничего + не выходил сделать ввод ключевых слов с клавиатуры
Ответы (1 шт):
Автор решения: Sergey
→ Ссылка
Проблема в том
Проблема в том, что то, что Вы написали - очень далеко от постановки задачи. Я бы не стал даже разбираться, но Ваша героическая попытка заслуживает уважения. Поэтому, попытаюсь ответить.
не выходил сделать ввод ключевых слов с клавиатуры
И не надо! Ключевые слова надо держать в отдельном файле. А то Вы замучаетесь их вводить каждый раз.
Я написал комменты - думаю, что всё понятно:
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
//-----------------------------------------
// Ввод списка ключевых слов
//-----------------------------------------
int input_key(char *key_wrd[]) {
FILE * FK;
int n = 0, len;
char *cp;
char a[30];
FK = fopen("KEY.txt","r");
if(FK == NULL) {
printf("Ошибка при открыти файла!\n");
perror("KEY.txt");
return -1;
}
// Читаем список клюевых слов
while (1) {
cp = fgets(a, 30, FK); // Считаем, что по слову на строку
if (cp == NULL) break;
len = strlen(a);
a[len-1] = '\0'; // Замазали символ '\n'
len --;
key_wrd[n] = malloc(len); // Выделили память под ключевое слово
strncpy(key_wrd[n], a, len); // Запомнили ключевое слово
n++;
}
fclose(FK);
return n;
}
//-----------------------------------------
// Проверка наличия ключевых слов в строке
//-----------------------------------------
int test_kw(char *a, char *key_wrd[], int n) {
int k;
for(k=0; k<n; k++) {
if ( strstr(a, key_wrd[k]) != NULL) {
// Обнаружено вхождение ключевого слова
return 1;
}
}
// Ключевых слов не найдено
return 0;
}
//--------------------------
// Главная функция
//--------------------------
int main(int srgc, char *argv[]){
FILE *F1, *F2; // Обрабатываемые файлы
char a[300]; // Буфер под одну строку
char *cp;
char *key_wrd[50]; // Не более 50 ключевых слов
int n_key; // Сколько реально ввели ключевых слов
int rc;
// Загружаем ключевые слова
n_key = input_key(key_wrd);
if (n_key < 1) {
printf("Список ключевых слов пуст.\n");
return -1;
}
printf("Список ключевых слов содержит %d слов\n", n_key);
// Открываем файлы
F1 = fopen("F1.txt","r");
if(F1 == NULL) {
printf("Ошибка при открыти файла!\n");
perror("F1.txt");
return -1;
}
F2 = fopen("F2.txt","w");
if(F2 == NULL) {
printf("Ошибка при открыти файла!\n");
perror("F2.txt");
return -1;
}
// Выполняем обработку
printf("Начинаем бработку!\n");
while (1) {
// Читаем очередную строку
cp = fgets(a, 300, F1);
if (cp == NULL) {
printf("Обработка закончена!\n");
break;
}
// Проверяем наличие ключевых слов
rc = test_kw(a, key_wrd, n_key);
if (rc > 0) {
// Ключевые слова обнаружены
fputs(a, F2);
} else {
// Ключевых слов нет
fputs("Ключевых слов нет.\n", F2);
}
}
// Закрываем файлы
fclose(F1);
fclose(F2);
}