Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
fLaSh.
0 / 0 / 0
Регистрация: 23.04.2011
Сообщений: 11
#1

Замена слова в файле - C++

23.04.2011, 19:30. Просмотров 2702. Ответов 9
Метки нет (Все метки)

Дорогие програмисты, помогите молодому студенту с написанием программы которая заменяет слово в файле. Тоесть пользовалель вводит слово которое надо заменить, потом вводит на которое надо заменить и програма заменяет это слово в файле.

У меня не получаеться сделать цикл с проверкой этого слова в файле и потом заменой его..(
Или кто может дать ссылку где об этом можно прочитать..

Заранее благодарочка =))
Програму надо написать на ТурбоСи или Borland C

Добавлено через 15 минут
Вот програма:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h>
#include<conio.h>
int dl(char *a)
{
 int e,sch=0;
 for(e=0;a[e]!=0;e++)
 sch++;
 return sch;
}
main()
{
FILE *fin;
char *f1="D:\\TC\\input.txt";
int i=0,k,l=0;
char m[20],n[20];
static char r[20];
clrscr();
printf("Введите слово которое надо заменить: ");
scanf("%s",&m);
 
printf("Введите слово на которое заменить: ");
scanf("%s",&n);
fin=fopen(f1,"r");
    while(!feof(fin))
    {
    r[i]=fgetc(fin);
    i++;
    }
puts(r);
fclose(fin);
l=dl(m);
  for(k=0;k<=l;k++)
  {
    if(m[k]!='\0'&&m[k]==r[k]&&r[l+1]==' ')
    n[k]=r[k];
  }
getch();
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2011, 19:30     Замена слова в файле
Посмотрите здесь:

Замена слова в текстовом файле!?!?! - C++
Пытаюсь разобраться с программкой, но нифига не выходит. :( Вод код программки: // filter.cpp: определяет точку входа для...

Замена слова в файле на другое слово - C++
Есть файл file.txt, в котором много текста, строк где-то на 25. Как мне в нем все слова &quot;afz&quot;, заменить на переменную в которой мое слово,...

Замена цифр в файле на соответствующие слова - C++
Здравствуйте! Я столкнулась с проблемкай... Мне надо написать программку, а я даже не знаю как начать. Помогите пожалуйста, вот задание:...

Ошибка. Поиск и замена слова в текстовом файле - C++
Задача: найти и заменить одно слово на другое в текстовом файле. Я сделал вот так, но она работает не совсем правильно - теряет символ...

Найти в файле все слова, которые можно сложить из букв заданного слова - C++
Дано слово р и файл f.найти в файле f все слова которые можна сложить с букв слова р.

Сравнение введенного слова и слова в файле - C++
Есть задача, где пользователь вводит слово, а программа находит такое-же слово в фале, проверяя поочередно все строки. Подразумевается, что...

Замена строк в файле - C++
Здравствуйте, у меня есть файл с текстом. Как мне сделать замену одной строки на другую без копирования всего файла? Немного дополню, мне...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
24.04.2011, 07:25     Замена слова в файле #2
Цитата Сообщение от fLaSh. Посмотреть сообщение
C
1
2
3
4
5
6
7
int dl(char *a)
{
 int e,sch=0;
 for(e=0;a[e]!=0;e++)
 sch++;
 return sch;
}
для этого есть библиотечная функция
C
1
size_t strlen(const char *s);
для сравнения слов есть функция
C
1
int strcmp(const char *s1, const char *s2);
все находиться в string.h.

С заменой слов в файле тоже не так все просто, если слова будут одинаковой длины, еще можно будет править непосредственно в файле. Если нет, тогда придется открывать еще один файл, читать из исходного файла слово, сравнивать с заданным, если равны записывать во второй файл новое слово, если нет - записывать считанное.
fLaSh.
0 / 0 / 0
Регистрация: 23.04.2011
Сообщений: 11
25.04.2011, 13:10  [ТС]     Замена слова в файле #3
Я думал просто проверять это слово(которое ввродит пользователь) в масиве куда записан файл, и если слово совпадает и за ним есть пробел то заменять его, а потом просто открыть тот же файл на запись и поновой записать весь масив. Только как это написать програмно..?)
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.04.2011, 13:35     Замена слова в файле #4
Цитата Сообщение от fLaSh. Посмотреть сообщение
Я думал просто проверять это слово(которое ввродит пользователь) в масиве куда записан файл, и если слово совпадает и за ним есть пробел то заменять его
Тут таже проблема с разной длинной заменяемых слов, оно конечно осуществимо но довольно трудоемко.
Если слова отделяются только пробелом и переводом строки, тогда можно считывать построчно fgtes'ом, разбивать на слова strtok'ом и записывать слово в символьный массив достаточной большого объема (можно использовать допустим sprintf). Потом этот массив записать обратно в файл.
fLaSh.
0 / 0 / 0
Регистрация: 23.04.2011
Сообщений: 11
27.04.2011, 19:19  [ТС]     Замена слова в файле #5
Сравнивать strcmp не получается потому что у меня в масиве записан весь файл посимвольно,а оно сравнивает только первое слово..((

фрагмент програмы: m - масив в котором слово которое надо заменить, n - масив в котором слово на которое надо заменить,
r - масив в котором хранится текст файла.
C++
1
2
3
4
5
6
7
8
9
p=0;
k=strcmp(m,r);
 
   if(k==0)
   { while(p<20)
     { n[p]=r[p];
       p++;
     }
   }
Добавлено через 27 минут
Цитата Сообщение от fLaSh. Посмотреть сообщение
Я думал просто проверять это слово(которое ввродит пользователь) в масиве куда записан файл, и если слово совпадает и за ним есть пробел то заменять его, а потом просто открыть тот же файл на запись и поновой записать весь масив. Только как это написать програмно..?)
Может кто помоч написать этим способом?
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
04.05.2011, 13:34     Замена слова в файле #6
Такой вариант подойдет?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
int main(int argc, char* argv[])
{
   char oldWord[20], newWord[20], fileNameIn[250], fileNameOut[250];
   char buf[50];
   int sym, j;
   FILE *f_in = NULL, *f_out = NULL;
 
   printf("Ââåäèòå èìÿ âõîäГ*îãî ГґГ*éëГ*.\n> ");
   scanf("%s", fileNameIn);
   f_in = fopen(fileNameIn, "r");
   if (!f_in)
   {
      printf("ГЋГёГЁГЎГЄГ* ïðè îòêðûòèè ГґГ*éëГ* %s.\n", fileNameIn);
      system("pause");
      return 1;
   }
   printf("Ââåäèòå èìÿ âûõîäГ*îãî ГґГ*éëГ*.\n> ");
   scanf("%s", fileNameOut);
   f_out = fopen(fileNameOut, "w");
   if (!f_out)
   {
      printf("ГЋГёГЁГЎГЄГ* ïðè îòêðûòèè ГґГ*éëГ* %s.\n", fileNameOut);
      system("pause");
      return 1;
   }
   printf("Ââåäèòå èñêîìîå ñëîâî.\n>");
   scanf("%s", oldWord);
   printf("Ââåäèòå Г*îâîå ñëîâî.\n>");
   scanf("%s", newWord);
   buf[0] = '\0';
   j = 0;
   while ((sym = fgetc(f_in)) != EOF)
   {
      if (ispunct(sym) || isspace(sym))
      {
         if (buf[0])
         {
            buf[j] = '\0';
            if (!strcmp(oldWord, buf))
               fputs(newWord, f_out);
            else
               fputs(buf, f_out);
            buf[0] = '\0';
            j = 0;
         }
         fputc(sym, f_out);
      }
      else
         buf[j++] = sym;
   }
   if (buf[0])
   {
      buf[j] = '\0';
      if (!strcmp(oldWord, buf))
         fputs(newWord, f_out);
      else
         fputs(buf, f_out);
   }
   fclose(f_in);
   fclose(f_out);
   system("pause");
   return 0;
}
fLaSh.
0 / 0 / 0
Регистрация: 23.04.2011
Сообщений: 11
05.05.2011, 16:58  [ТС]     Замена слова в файле #7
А если я хочу добавить еще функцию замена не полностью слова, а только его части(ведь бывает что в слово может входить искомое слово), тогда просто не проверять на знаки пунктуации и пробелы?

Добавлено через 2 часа 10 минут
Хотел спросить, что означает эта строка

int main(int argc, char* argv[])

почему int main, а не просто main и что такое argc и argv.

И почему после system("pause") идёт return 1, я так понял что если 0, то это операция верна, а если 1 - ошибка?
fLaSh.
0 / 0 / 0
Регистрация: 23.04.2011
Сообщений: 11
10.05.2011, 17:29  [ТС]     Замена слова в файле #8
Ув. kazak, если вам не трудно вы б могли написать коментарии, а то мне как начинающему не совсем всё понятно

Добавлено через 25 минут
а именно начиная отсюда

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
while ((sym = fgetc(f_in)) != EOF)
   {
      if (ispunct(sym) || isspace(sym))
      {
         if (buf[0])
         {
            buf[j] = '\0';
            if (!strcmp(oldWord, buf))
               fputs(newWord, f_out);
            else
               fputs(buf, f_out);
            buf[0] = '\0';
            j = 0;
         }
         fputc(sym, f_out);
      }
      else
         buf[j++] = sym;
   }
   if (buf[0])
   {
      buf[j] = '\0';
      if (!strcmp(oldWord, buf))
         fputs(newWord, f_out);
      else
         fputs(buf, f_out);
   }
 Комментарий модератора 
Используйте теги форматирования кода!
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
12.05.2011, 12:48     Замена слова в файле #9
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
while ((sym = fgetc(f_in)) != EOF) /* считываем символ из файла пока не достигнем конца файла*/
   {
      if (ispunct(sym) || isspace(sym)) /* если считанные символ - знак препинания или разделитель, то*/
      {
         if (buf[0]) /* если первый символ буфера не ноль, т.е. буфер не пуст*/
         {
            buf[j] = '\0'; /* добавляем в конец буфера ноль, чтобы получить нормальную си-строку*/
            if (!strcmp(oldWord, buf)) /* сравниваем содержимое буфера с искомым словом*/
               fputs(newWord, f_out); /* если строки совпадают, записываем в выходной файл новое слово*/
            else /* если нет, записывем содержимое буфера*/
               fputs(buf, f_out);
            buf[0] = '\0'; /* записываем в начало буфера ноль ("помечаем", что буфер пуст)*/
            j = 0; /* обнуляем указатель на конец буфера*/
         }
         fputc(sym, f_out); /*записываем считанный символ в файл*/
      }
      else /* если считанный символ - буква или цифра, то*/
         buf[j++] = sym; /* добавляем считанный символ в конец буфера*/
   }
/* после основного цикла еще раз проверяем буфер, если он не пуст производим сравнение и запись*/
   if (buf[0])
   {
      buf[j] = '\0';
      if (!strcmp(oldWord, buf))
         fputs(newWord, f_out);
      else
         fputs(buf, f_out);
   }
Цитата Сообщение от fLaSh. Посмотреть сообщение
Хотел спросить, что означает эта строка
int main(int argc, char* argv[])
почему int main, а не просто main и что такое argc и argv.
В старых компиляторах, если явно не указывался тип, то считалось что объявлялся тип инт. Так что в старых компиляторах просто main и int main эквивалентны. В современных компиляторах нужно явно указывать тип, int по умолчанию не поддерживается. argc и argv параметры командной строки, argc содержит число параметров, argv сами параметры (включая имя программы).

Цитата Сообщение от fLaSh. Посмотреть сообщение
И почему после system("pause") идёт return 1, я так понял что если 0, то это операция верна, а если 1 - ошибка?
Да, принято, если программа завершается корректно возвращать 0, если в процессе выпонения возникли какие-то ошибки, возвращать не нулевое число. Какое конкретно число, решает сам программист, если в программе возможно возникновение разных ошибок, то для каждой ошибки программист может назначить отдельный код.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2011, 15:36     Замена слова в файле
Еще ссылки по теме:

Замена текста в файле - C++
У меня есть программа которая записывает написанный в консоли текст в файл. Но мне нужно заменить некоторое количество текста начиная с...

Замена символа в файле - C++
Есть текстовый файл. Необходимо считать и заменить все пробелы на * и записать это в другой файл. Как реализовать замену?

Замена символов в файле - C++
кто нибудь может написать код программы : с консоли ввести путь к файлу и задать три группы по два любых символа ( например a-b, g-k, 1-3)....

Замена слов в файле - C++
Помогите, пожалуйста, исправить код. Нужно : 1. Чтобы замена производилась независимо от регистра 2.Выводить все в новый файл ...

Замена строки в файле - C++
Помогите, пожалуйста, с алгоритмом или кодом решения следующей проблемы (на С или С++): есть обычный текстовый файл, в нем содержатся...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fLaSh.
0 / 0 / 0
Регистрация: 23.04.2011
Сообщений: 11
12.05.2011, 15:36  [ТС]     Замена слова в файле #10
Огромнейшое спасибо за помощь!!!:dance3:
Yandex
Объявления
12.05.2011, 15:36     Замена слова в файле
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru