Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
5 / 5 / 0
Регистрация: 20.11.2010
Сообщений: 51

Чтение слов из текстового файла и замена этими словами названий переменных в других файлах (оптимизация)

08.11.2012, 15:13. Показов 1226. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите с оптимизацией кода
Программа читает слова из текстового файла и заменяет этими словами названия переменных и т.д в других файлах.

Вот сам код:
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <iostream>
using namespace std;
using namespace System;
using namespace System::IO;
using namespace System::Text;
 
String* insertChar(String *data, int loc, String *replacement, int i) {
    return data->Insert(loc, replacement->Substring(i, 1));
}
 
String* replace_word(String* data, int loc, int length, String* replacement) {
    // delete the pattern string from loc:
    data = data->Remove(loc, length);
    // insert each character of the replacement string:
    for (int i = 0; i < replacement->Length; i++) {
        data = insertChar(data, loc+i, replacement, i);
        // data->Insert(loc + i, replacement->Substring(i, 1));
    }
    return data;
}
 
String* string_subst(String *data, String *pattern, String *replacement) {
    try {
            int loc;
            // find every occurrence of pattern:
            [I]for (loc = data->IndexOf(pattern, 0); loc >= 0;
                loc = data->IndexOf(pattern, 0)) {[/I]
                // replace word
                data = replace_word(data, loc, pattern->Length, replacement);
            }   
            return data;
    } catch (Exception *e) {
        Console::WriteLine("Error in substitute ");
        Console::WriteLine(e->ToString());
        return data;
    }
}
 
 
String* batch_subst(String *data, const char* subs_filename) {
    try {
        String *subs_file = new String(subs_filename);
        StreamReader *subs_reader = new StreamReader(subs_file);
        String *pattern, *replacement, *separator;
        while (subs_reader->Peek() >= 0) {
            pattern = subs_reader->ReadLine();
            replacement = subs_reader->ReadLine();
            separator = subs_reader->ReadLine();
            data = string_subst(data, pattern, replacement);
        }
        return data;
    } catch(Exception* e ) {
        Console::WriteLine( "Error in do_substitutions ");
        Console::WriteLine( e->ToString());
        return data;
    }
}
 
void process_file(const char* filename, const char* subs_filename) {
    StreamReader *reader;
    StreamWriter *writer;
    String *file = new String(filename);
    try {
        reader = new StreamReader( file );
        String *data = reader->ReadToEnd();
        data = batch_subst(data, subs_filename);
        reader->Close();
        // write the data
        writer = new StreamWriter(file, false);
        writer->Write(data);
        writer->Close();
    }  catch(Exception* e) {
        Console::WriteLine( "Error while processing file ");
        Console::WriteLine( e->ToString());
    }
}
 
int main(int argc, char *argv[]) {  
    if (argc < 3) {
        cout << "Not enough input arguments" << endl;
        cout << "Usage: substitute subs-file src1 src2 ..." << endl;
    } else {
 
        for (int i = 2; i < argc; i++) {
            process_file(argv[i], argv[1]);
        }
    }
    return 0;
}
Тут я обнаружил что больше всего времени уходит на выполнение функции indexOf()(так как каждый раз берет координаты слова) и надо каким то образом заменить эту функцию. Ниже я прикрепил текстовый файл со словами.
В текстовом файле
1-я строка(aa) - искомое слово(которую нужно заменить)
2-я строка (ba) - замена
Вложения
Тип файла: txt replace.txt (481 байт, 3 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.11.2012, 15:13
Ответы с готовыми решениями:

Чтение переменных из текстового файла
Раньше с С++ не сталкивался, и вот поставили мне такую задачу: вынуть следующие переменные для последующего расчёта double l //длина...

Чтение из текстового файла строк или слов в произвольном порядке
Доброго Времени суток! Продолжаю писать проект. Есть такое задание: Пользователю из текстового файла(txt.txt) выдается слово в Label ...

Чтение файла, замена слов и запись результата в новый файл
Помогите написать конвертер текста Например, у меня есть файл с определенным текстом. Мне нужно что бы программа скопировала все в в...

1
5 / 5 / 0
Регистрация: 20.11.2010
Сообщений: 51
10.11.2012, 14:06  [ТС]
Спасибо всем! Разобрался...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.11.2012, 14:06
Помогаю со студенческими работами здесь

Замена в строке всех слов, совпадающих с именами заданных переменных, значениями этих переменных
добрый день. подскажите пожалуйста, можно ли на бате реализовать следущее: @echo off cls set type=Debug set amodel=32

Поиск и замена слов в текстовых файлах
Приветствую! Помогите пожалуйста. Необходим батник. Входные данные: Есть папка History с файлами .txt кодировка UTF-8 язык ENG ...

Как работать с переменными из файла main.c в других файлах
Добрый вечер. Сложилась такая странная ситуация - сделал проект с помощью CubeMX, открываю его в KEIL uVision5. Я определил в главном файле...

Чтение данных из *.txt файла, находящегося в ресурсах, и заполнение этими данными DataGridView
На форме расположен ComboBox, в котором можно выбрать один из типов резьбы (G,M,Pg,Rp,Tr и все резьбы). После выбора одного из значений в...

Заполнить массив Char словами из текстового файла
как забить в массив типа чар слова из текстового файла?


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Дальние перспективы сервера - слоя сети.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru