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

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

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

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

Вот сам код:
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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2012, 15:13
Ответы с готовыми решениями:

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

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

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

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

1
5 / 5 / 0
Регистрация: 20.11.2010
Сообщений: 51
10.11.2012, 14:06  [ТС] 2
Спасибо всем! Разобрался...
0
10.11.2012, 14:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2012, 14:06
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru