Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 20.05.2020
Сообщений: 4
1

Как заменить строку в файле

20.05.2020, 14:53. Просмотров 916. Ответов 7

Есть текстовый файл, нужно найти номер строки содержащую текст "ConnectionIP", к этому номеру прибавить 1 (n+1), и заменить строку n+1 на нужную. n+1 у меня получилось, а вот как заменить ее, не пойму.

C++
1
2
3
4
5
6
7
8
9
10
11
12
AnsiString pathmagconf = ExtractFilePath(Application->ExeName)+"\\ConfigService\\Service.config";
 
AnsiString host = ComboBox3->Text; // из ComboBox3 текст для замены
 
// ищем номер строки
AnsiString z;
AnsiString aSearchWord = "ConnectionIP";
TStringList *fs = new TStringList;
fs->LoadFromFile(pathmagconf);
for(int i=0; i<fs->Count; i++)
if(fs->Strings[i].Pos(aSearchWord)) z = (i+1); //к искомому номеру прибавляем 1
delete fs;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2020, 14:53
Ответы с готовыми решениями:

Как заменить в файле строку, используя std::map?
Как сделать так чтобы из файла записывались строки Можно было выбрать какую строку заменить на...

Qt - заменить строку в файле
Мне необходимо найди в файле ключевое слово, определить строку, дополнить или кое что вырезать из...

Заменить строку в файле
Добрый день! Нужно заменить строку в файле с выбранным номером на введенную в консоль. Сначала...

Заменить в файле одну строку на другую
Реализовать в программе функцию замену в текстовом файле заданной строки на другую строку, также...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
29266 / 19345 / 7587
Регистрация: 22.10.2011
Сообщений: 33,725
Записей в блоге: 6
20.05.2020, 17:32 2
Цитата Сообщение от zhigandriga Посмотреть сообщение
Есть текстовый файл
Формат файла можно посмотреть?
0
0 / 0 / 0
Регистрация: 20.05.2020
Сообщений: 4
20.05.2020, 21:11  [ТС] 3
Добавлено через 1 минуту
Цитата Сообщение от volvo Посмотреть сообщение
Формат файла можно посмотреть?
</setting>
<setting name="ConnectionIP" serializeAs="String">
<value>10.30.44.99</value>
</setting>
</Transport.Settings>
</userSettings>
<system.serviceModel>
<bindings>
<netTcpBinding>

Добавлено через 7 минут
строка
C++
1
<setting name="ConnectionIP" serializeAs="String">
имеет номер допустим 30, прибавляю 1, получаю номер нужной строки
C++
1
<value>10.30.44.99</value>
нужно ее заменить на другую, StringReplace здесь не подходит, в файле есть еще символы <value> и 10.30.44.99 не константа.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
29266 / 19345 / 7587
Регистрация: 22.10.2011
Сообщений: 33,725
Записей в блоге: 6
20.05.2020, 21:54 4
Лучший ответ Сообщение было отмечено zhigandriga как решение

Решение

Ну есть же номер строки, которую надо заменить, вот и заменяй ее:
C++
1
fs->Strings[i+1] = на_что_там_надо_заменить;
StringReplace тут как раз может и подходить, если наконец нам расскажут, НА ЧТО НАДО МЕНЯТЬ СТРОКУ, ибо он будет работать только с одной-единственной строкой, fs->Strings[i+1]... Все остальные <value> ее не касаются.
0
0 / 0 / 0
Регистрация: 20.05.2020
Сообщений: 4
22.05.2020, 10:07  [ТС] 5
Огромное спасибо. Все получилось.

C++
1
2
3
4
5
6
7
AnsiString aSearchWord = "ConnectionIP";
TStringList *fs = new TStringList;
fs->LoadFromFile(pathmagconf);
for(int i=0; i<fs->Count; i++)
if(fs->Strings[i].Pos(aSearchWord))
{fs->Strings[i+1] = ("<value>"+hostmag+"</value>");
fs->SaveToFile(pathmagconf);}
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
29266 / 19345 / 7587
Регистрация: 22.10.2011
Сообщений: 33,725
Записей в блоге: 6
22.05.2020, 11:06 6
А может, все-таки, с XML-файлами проще работать средствами, предназначенными для работы именно с XML-ями? К примеру, вот такой XML:

XML
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8"?>
<userSettings>
    <Transport.Settings>
        <setting name="JustData" serializeAs="String">
            <value>lalala</value>
        </setting>
        <setting name="ConnectionIP" serializeAs="String">
            <value>10.30.44.99</value>
        </setting>
    </Transport.Settings>
</userSettings>
прекрасно обработался кодом:
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
String hostmag = "192.168.0.1"; // для примера
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    IXMLDOMDocument *Xml;
    ::CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER,
        __uuidof(IXMLDOMDocument), (void**)&Xml);
 
    String path = ExtractFilePath(ParamStr(0)) + "my.xml";
 
    short success;
    Xml->load(Variant(path), &success);
    if(success)
    {
        IXMLDOMNode *node;
        // ищем элемент <value>, который находится внутри <setting>, у которого свойство name = ConnectionIP
        Xml->selectSingleNode(L"/userSettings/Transport.Settings/setting[@name=\"ConnectionIP\"]/value", &node);
        // меняем текст на новый
        node->put_text(hostmag.w_str());
        // сохраняем файл
        Xml->save(Variant(path));
    }
    else
        ShowMessage(L"Ошибка открытия файла...");
 
    Xml->Release();
}
Собственно, ничего сложного. По мне - так проще, чем через StringList...
1
0 / 0 / 0
Регистрация: 20.05.2020
Сообщений: 4
22.05.2020, 11:13  [ТС] 7
Цитата Сообщение от volvo Посмотреть сообщение
String path = ExtractFilePath(ParamStr(0)) + "my.xml";
А если расширение файла не xml, а config, это сработает?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
29266 / 19345 / 7587
Регистрация: 22.10.2011
Сообщений: 33,725
Записей в блоге: 6
22.05.2020, 11:15 8
А какая разница? Главное, чтобы структура была xml-ная, а название и расширение - любые могут быть.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2020, 11:15

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как заменить строку в файле
Делаю класс по работе с файлами конфигурации приложения Подскажите как заменить строчку чтобы...

Как заменить строку в текстовом файле?
Как заменить строку в текстовом файле?

Как заменить определённую строку (по номеру) в файле?
Как заменить определённую строку(по номеру) в файле???

Как можно заменить конкретную строку в rtf файле
Доброго времени суток!Подскажите как можно заменить конкретную строку в rtf файле

Найти в текстовом файле строку по заданному слову и заменить ей определённую часть строки в другом файле
Всех с Новым Годом! Наверное избитая тема, но все же... Задача такая: Существует два файла:...

Как можно заменить строку или слово в файле с помощью команды COPY?
у меня есть файл с определенным текстом, как можно заменить строку или слово в файле с помощью...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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