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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.75
Mr.kto
93 / 92 / 1
Регистрация: 18.08.2012
Сообщений: 309
#1

Поиск и замена слов в файле txt - C++

08.05.2013, 23:08. Просмотров 3088. Ответов 8
Метки нет (Все метки)

Как заменить и найти слова в файле txt на С++.
То есть есть файл вот такой структуры

AAA
БББ
BBB
111
222

ыыы
ввв
ааа
333
444

и так далее.
Нужно найти ААА и далее (БББ ВВВ 111 222) заменить на что та другое.
Желательно с помощью библиотеки fstream.
Спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2013, 23:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поиск и замена слов в файле txt (C++):

Поиск в текстовом файле всех слов, заданных в другом текстом файле - C++
Вообщем такое задание: Поиск в текстовом файле всех слов, заданных в другом текстом файле; Не могу понять почему не работает: ...

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

Поиск в txt файле - C++
Есть программа Телефонная книга. Программа со структурой. Информация сохраняется в txt и считавыется оттуда же. Присутствуют функции поиска...

Замена нужных слов в файле - C++
Дан файл. Предложить пользователю ввести номер слова, которое он хочет заменить точками(.), вывести на экран измененный текст файла. Не...

Замена слов в текстовом файле - C++
Нужна помощь, как в текстовом файле изменить слово, например, "Black" на "White"?

Замена слов в файле звездочками - C++
Задача: заменить последние слова в предложениях. Вот текст самого файла : Когда-то (помню с умиленьем) Я смел вас няньчить с...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
09.05.2013, 01:06 #2
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
#include <vector>
#include <string>
#include <iostream>
#include <fstream>
#include <iterator>
 
#define FLUSH_CIN if (std::wcin.peek()) std::wcin.ignore()
 
int main(int argc, const char* argv[])
{
    if (argc != 2)
    {
        std::cerr << "wrong arguments" << std::endl;
        return 1;
    }
 
    std::locale::global(std::locale(""));
    
    std::wstring in_word, out_word;
    std::wcout << L"Найти слово: ";
    std::wcin >> in_word;
    FLUSH_CIN;
    std::wcout << L"Заменить на слово: ";
    std::getline(std::wcin, out_word);
 
    std::wifstream in(argv[1], std::ios::in);
    if (!in.good())
    {
        std::cerr << "couldn't open file '" << argv[1] << "'\n";
        return 1;
    }
 
    std::istream_iterator<std::wstring, wchar_t> ii(in);
    std::istream_iterator<std::wstring, wchar_t> eos;
    std::vector<std::wstring> fileInside(ii, eos);
    in.close();
 
    for (int i = 0; i < fileInside.size(); ++i)
    {
        if (fileInside[i] == in_word)
        {
            fileInside[i] = out_word;
        }
    }
 
    std::wofstream out(argv[1], std::ios::out | std::ios::trunc);
    if (!out.good())
    {
        std::cerr << "couldn't open file '" << argv[1] << "'\n";
        return 1;
    }
 
    for (int i = 0; i < fileInside.size(); ++i)
    {
        out << fileInside[i] << std::endl;
    }
 
    out.close();
 
    return 0;
}
1
Mr.kto
93 / 92 / 1
Регистрация: 18.08.2012
Сообщений: 309
09.05.2013, 14:01  [ТС] #3
Спасибо большое, но неужели не можно как-то это все организовать попроще? Я в С++ только азы знаю а тут
А да еще, скажите как в вашем примере передать путь к файлу, допустим A.txt который лежит в корне программы?
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
09.05.2013, 21:01 #4
Mr.kto, если txt файл лежит в одном каталоге с исполняемым модулем, тогда при запуске программы из командной строки, просто после ввода названия программы 2-м аргументом нужно ввести имя текстового файла. П. С. чем больше всяких контейнеров, итераторов и прочих средств С++, тем меньше нужно возиться с низкоуровневым кодом. Структура программы будет более простой: кода будет меньше, а читаемость будет лучше.

Добавлено через 2 минуты
П.С.С можно написать код на чистом С и С++ и сравнить: количество символов в исходном файле на С будет в 1.5 -2 раза больше, а чтобы понять код нужно будет в 2-3 раза больше времени чем при варианте с С++.
1
Mr.kto
93 / 92 / 1
Регистрация: 18.08.2012
Сообщений: 309
09.05.2013, 21:09  [ТС] #5
Цитата Сообщение от xtorne21st Посмотреть сообщение
Mr.kto, если txt файл лежит в одном каталоге с исполняемым модулем, тогда при запуске программы из командной строки, просто после ввода названия программы 2-м аргументом нужно ввести имя текстового файла. П. С. чем больше всяких контейнеров, итераторов и прочих средств С++, тем меньше нужно возиться с низкоуровневым кодом. Структура программы будет более простой: кода будет меньше, а читаемость будет лучше.

Добавлено через 2 минуты
П.С.С можно написать код на чистом С и С++ и сравнить: количество символов в исходном файле на С будет в 1.5 -2 раза больше, а чтобы понять код нужно будет в 2-3 раза больше времени чем при варианте с С++.
А можно ваш код сделать как функцию? Так как это только часть программы которую я не смог сам сделать
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
09.05.2013, 22:35 #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
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <iterator>
#include <algorithm>
 
#define FLUSH_CIN if (std::wcin.peek()) std::wcin.ignore()
typedef std::istream_iterator<std::string> ii;
 
bool cmp(const std::string& left, const std::string& right)
{
    return left.size() < right.size();
}
 
// При ошибке возвращает -1.
int changeFile(int argc, const char* argv[])
{
    std::ifstream in(argv[1], std::ios::in);
    std::ofstream out(argv[2], std::ios::out);
    if (!in || !out)
    {
        std::cerr << "couldn't open file(s) " << std::endl;
        return -1;
    }
 
    std::string line;
    while (std::getline(in, line))
    {
        if (line.size() > 0)
        {
            std::stringstream str(line);
            std::vector<std::string> v((ii(str)), ii());
 
            std::vector<std::string>::const_iterator max_word
                = std::max_element(v.begin(), v.end(), cmp);
 
            std::string new_word = *max_word;
            new_word += ' ';
            new_word += line;
            new_word += ' ';
            new_word += *max_word;
            out << new_word << std::endl;
        }
        else
        {
            out << "\n";
        }
    }
 
    in.close(); out.close();
    return 0;
}
 
 
int main(int argc, const char* argv[])
{
    if (changeFile(argc, argv) != -1)
    {
        // do somthing
        return 0;
    }
    return 1;
}
1
Mr.kto
93 / 92 / 1
Регистрация: 18.08.2012
Сообщений: 309
09.05.2013, 23:29  [ТС] #7
Цитата Сообщение от xtorne21st Посмотреть сообщение
Конечно, достаточно весь код помесить в функцию, например так:
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
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <iterator>
#include <algorithm>
 
#define FLUSH_CIN if (std::wcin.peek()) std::wcin.ignore()
typedef std::istream_iterator<std::string> ii;
 
bool cmp(const std::string& left, const std::string& right)
{
    return left.size() < right.size();
}
 
// При ошибке возвращает -1.
int changeFile(int argc, const char* argv[])
{
    std::ifstream in(argv[1], std::ios::in);
    std::ofstream out(argv[2], std::ios::out);
    if (!in || !out)
    {
        std::cerr << "couldn't open file(s) " << std::endl;
        return -1;
    }
 
    std::string line;
    while (std::getline(in, line))
    {
        if (line.size() > 0)
        {
            std::stringstream str(line);
            std::vector<std::string> v((ii(str)), ii());
 
            std::vector<std::string>::const_iterator max_word
                = std::max_element(v.begin(), v.end(), cmp);
 
            std::string new_word = *max_word;
            new_word += ' ';
            new_word += line;
            new_word += ' ';
            new_word += *max_word;
            out << new_word << std::endl;
        }
        else
        {
            out << "\n";
        }
    }
 
    in.close(); out.close();
    return 0;
}
 
 
int main(int argc, const char* argv[])
{
    if (changeFile(argc, argv) != -1)
    {
        // do somthing
        return 0;
    }
    return 1;
}
Вы так грамотно пишите код А можно мне попроще то есть процедура в нее передали адрес к файлу (как строку с кода) и все? Спасибо!
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
10.05.2013, 01:20 #8
Цитата Сообщение от Mr.kto Посмотреть сообщение
Вы так грамотно пишите код
Вы мне явно льстите - я только учусь.
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
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <iterator>
#include <algorithm>
 
#define FLUSH_CIN if (std::wcin.peek()) std::wcin.ignore()
typedef std::istream_iterator<std::string> ii;
 
bool cmp(const std::string& left, const std::string& right)
{
    return left.size() < right.size();
}
 
// При ошибке возвращает -1.
int changeFile(const char* fileIn, const char* fileOut)
{
    std::ifstream in(fileIn, std::ios::in);
    std::ofstream out(fileOut, std::ios::out);
    if (!in || !out)
    {
        std::cerr << "couldn't open file(s) " << std::endl;
        return -1;
    }
 
    std::string line;
    while (std::getline(in, line))
    {
        if (line.size() > 0)
        {
            std::stringstream str(line);
            std::vector<std::string> v((ii(str)), ii());
 
            std::vector<std::string>::const_iterator max_word
                = std::max_element(v.begin(), v.end(), cmp);
 
            std::string new_word = *max_word;
            new_word += ' ';
            new_word += line;
            new_word += ' ';
            new_word += *max_word;
            out << new_word << std::endl;
        }
        else
        {
            out << "\n";
        }
    }
 
    in.close(); out.close();
    return 0;
}
 
 
int main()
{
    if (changeFile("fileInput.txt", "fileOutput.txt") != -1)
    {
        // do somthing
        return 0;
    }
    return 1;
}
1
Mr.kto
93 / 92 / 1
Регистрация: 18.08.2012
Сообщений: 309
10.05.2013, 01:30  [ТС] #9
Большущие спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2013, 01:30
Привет! Вот еще темы с ответами:

Возможен ли поиск в txt-файле? - C++
доброе время суток, сам я не програмер. Но решил облегчить себе жизнь :) и так ближе к делу создал програмку (с гуглом :) ) которая...

Замена слов разной длины в файле - C++
Здравствуйте, вопрос собственно в заголовке темы.Т.е. есть слово например Земля мы хотим заменить на Марс. Когда еще слова одинаковой...

Поиск в .txt файле и вывод на экран - C++
Такая проблема, необходимо осуществить поиск слова в .txt файле , если данной слово найдено, то распечатать строку с этим словом, и...

Поиск, сортировка и удаление строки в txt файле - C++
Помогите новичку с C++. Есть файл с данными вида: ФИО Дата рождения Образование и тд... Нужно организовать поиск, чтобы в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.05.2013, 01:30
Ответ Создать тему
Опции темы

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