Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/57: Рейтинг темы: голосов - 57, средняя оценка - 4.77
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86

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

25.01.2012, 10:22. Показов 11026. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Собственно вопрос: как вставить нужный текст в произвольное место в файле *.txt?

Например, в середине файла есть текст: "Здесь написан фрагмент текста, в середину которого нужно вставить другой фрагмент текста."

Вот, допустим, пере словом "фрагмент" нужно вставить часть другого текста. Как это реализовать?

Знаю как добавить в файл текст, но он добавляется просто в конец файла.

буду очень благодарен за помощь!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.01.2012, 10:22
Ответы с готовыми решениями:

Вставка символа в произвольное место консоли
Как собственно реализовать вставку символо в произвольное место консоли? По сабжу. Пишу прогогулину, которая создает и записывает некие...

Итератор, вставка в произвольное место списка
Здравствуйте. Подскажите как вставить значение в произвольное место списка используя итератор. Эта функция должна выглядеть так: ...

Сортировка ArrayList и вставка элемента в произвольное место
В набор ArrayList поместить случайные значения типа Int в диапазоне(300...500) и количестве(2030) с помощью метода add. Отсортировать...

31
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
25.01.2012, 10:38
создать временный файл, перенести в него содержимое файла до места вставки, вставить то что хотим, перенести остаток, удалить оригинал, переименовать временный файл. если не боимся уничтожить оригинал можно считать его в память, модифицировать и сбросить обратно затерев то что было
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
25.01.2012, 10:43  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
создать временный файл, перенести в него содержимое файла до места вставки, вставить то что хотим, перенести остаток, удалить оригинал, переименовать временный файл. если не боимся уничтожить оригинал можно считать его в память, модифицировать и сбросить обратно затерев то что было
Мне бы сам код, я ещё совсем зелёный в программировании.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
25.01.2012, 11:22
Для зеленых:

1. Почитать про TStringList
2. Загрузить файл в StringList.
3. Вставить в нужное место StringList нужные строки.
4. Сохранить StringList в файл.
1
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
25.01.2012, 11:48
если вы успешно добавляли в файл текст, то у вас не должно возникать проблем с кодом потому как те операции которые я описал могут быть сведены к добавлению текста. пишите в чем проблема - будем искать ответ
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
25.01.2012, 14:49  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
Для зеленых:

1. Почитать про TStringList
2. Загрузить файл в StringList.
3. Вставить в нужное место StringList нужные строки.
4. Сохранить StringList в файл.
Не могу никак разобраться. Пытаюсь заменить любое слово в предложении с помощью метода IndexOf, но так не выходит, заменяется только всё предложение или любой фрагмент текста, начинающийся с новой строки. А с методом Insert вообще ничего не понял.
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
25.01.2012, 16:39
в какое именно место текста вы собираетесь вставлять нечто и что именно?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
25.01.2012, 16:59
- может с примером понятнее будет?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::Button1Click(TObject *Sender)
{
      proza = new TStringList();
      AnsiString St ;
 
      for(int i=0;i<Memo1->Lines->Count;i++)
        proza->Add(Memo1->Lines->Strings[i]);
      St= proza->Strings[1].SubString(1,6) ;
      AppendStr(St," èñïðàâëåííàÿ") ;
      St+= proza->Strings[1].SubString(7,99) ;
      proza->Strings[1] = St;
      proza->Insert(2,"Âíåøíÿÿ ñòðîêà") ;
      proza->SaveToFile("proza.txt") ;
}
Изображения
 
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
25.01.2012, 17:18  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
в какое именно место текста вы собираетесь вставлять нечто и что именно?
фрагмент текстового файла, в который нужно вставить строку:

[BG]
Meter=IMAGE
ImageName=tabstar.png
Y=7
LeftMouseDownAction=!Execute [!HideMeter BG][!HideMeter BG2][!HideMeter BG3][!HideMeterApp1][!HideMeterApp2][!HideMeterApp3][!HideMeterApp4][!HideMeterApp5][!HideMeterApp6][!HideMeterApp7][!HideMeterApp8][!HideMeterApp9] [!Redraw]


Перед [!Redraw] нужно будет вставить [!HideMeterApp10] и т.д.
Пытался попробовать заменять [!Redraw] на [!HideMeterApp10][!Redraw] - не получилось.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
25.01.2012, 17:34
Пытался попробовать заменять [!Redraw] на [!HideMeterApp10][!Redraw] - не получилось.
- попробуйте так (gh - строка)__
C++
1
gh = StringReplace(gh,"[!Redraw]","[!HideMeterApp10] [!Redraw]",TReplaceFlags()<<rfReplaceAll);
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
25.01.2012, 17:54  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
- попробуйте так (gh - строка)__
C++
1
gh = StringReplace(gh,"[!Redraw]","[!HideMeterApp10] [!Redraw]",TReplaceFlags()<<rfReplaceAll);
Т.е. в коде должно быть?
C++
1
AnsiString gh = StringReplace(gh,"[!Redraw]","[!HideMeterApp10] [!Redraw]",TReplaceFlags()<<rfReplaceAll);
Не заменяет =(
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
25.01.2012, 18:05
Цитата Сообщение от ParadoxX27 Посмотреть сообщение
AnsiString gh = StringReplace(gh,
Ну вы сами подумайте, как может быть объевление переменной gh с присвоением результата функции с использованием переменной gh. Функция возвращает результат замены текста.
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
25.01.2012, 18:16
Не заменяет =(
а должно..
gh, понятное дело, Ваша строка, где, в частности, содержится [!Redraw] (в конце). Это пример замены текста.
1
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
25.01.2012, 20:04  [ТС]
Цитата Сообщение от DefineTrueFalse Посмотреть сообщение
Ну вы сами подумайте, как может быть объевление переменной gh с присвоением результата функции с использованием переменной gh. Функция возвращает результат замены текста.
Спасибо! Я просто ещё почти не разбираюсь в программировании

Добавлено через 56 секунд
Цитата Сообщение от nick42 Посмотреть сообщение
а должно..
gh, понятное дело, Ваша строка, где, в частности, содержится [!Redraw] (в конце). Это пример замены текста.
Спасибо большое! Я не правильно понял.

Добавлено через 4 минуты
Про строку я понял, а у меня же строка будет изменяться по мере добавления к ней новых фрагментов. Как с этим быть?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
25.01.2012, 21:06
Цитата Сообщение от ParadoxX27 Посмотреть сообщение
у меня же строка будет изменяться по мере добавления к ней новых фрагментов. Как с этим быть?
если не ошибаюсь, Nitan дал Вам здесь отличный пример, как менять числа в строке -Вам ведь именно это нужно?- так вот на основе того примера и действуйте.
1
25.01.2012, 21:17

Не по теме:

nick42, не ошибаетесь :) .

0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
26.01.2012, 04:15  [ТС]
nick42, не заменяет =( Может я опять что не так написал?

C++
1
2
3
4
5
6
TStringList* sl= new TStringList();
sl->LoadFromFile("test.txt");
AnsiString gh=sl->("LeftMouseDownAction=!Execute [!HideMeter BG][!ShowMeter BG2][!ShowMeter BG3][!ShowMeter App1][!ShowMeter App2][!ShowMeter App3][!ShowMeter App4][!ShowMeter App5][!ShowMeter App6][!ShowMeter App7][!ShowMeter App8][!ShowMeter App9][!Redraw]");
gh = StringReplace(gh,"[!Redraw]","[!ShowMeter App10][!Redraw]",TReplaceFlags()<<rfReplaceAll);
sl->SaveToFile("test.txt");
delete sl;
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.01.2012, 04:21
ParadoxX27, естественно

В строке у вас [!Redraw] , менять вы собрались [!Redraw]1, определитесь.

Добавлено через 1 минуту
ну а это -
C++
1
AnsiString gh=sl->("LeftMouseDownAction=!Execute [!HideMeter BG][!ShowMeter BG2][!ShowMeter BG3][!ShowMeter App1][!ShowMeter App2][!ShowMeter App3][!ShowMeter App4][!ShowMeter App5][!ShowMeter App6][!ShowMeter App7][!ShowMeter App8][!ShowMeter App9][!Redraw]");
- вообще маразм
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
26.01.2012, 04:23  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
ParadoxX27, естественно

В строке у вас [!Redraw] , менять вы собрались [!Redraw]1, определитесь.
Опечатка
В коде всё верно написано, просто тут забыл единицу убрать. Исправил. Всё равно не заменяет.

Добавлено через 1 минуту
Цитата Сообщение от LK Посмотреть сообщение
ParadoxX27, естественно

В строке у вас [!Redraw] , менять вы собрались [!Redraw]1, определитесь.

Добавлено через 1 минуту
ну а это -
C++
1
AnsiString gh=sl->("LeftMouseDownAction=!Execute [!HideMeter BG][!ShowMeter BG2][!ShowMeter BG3][!ShowMeter App1][!ShowMeter App2][!ShowMeter App3][!ShowMeter App4][!ShowMeter App5][!ShowMeter App6][!ShowMeter App7][!ShowMeter App8][!ShowMeter App9][!Redraw]");
- вообще маразм
Ну вот я же говорю, что не понимаю как и что делать, вот и туплю, извините

А как будет верно?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.01.2012, 04:35
Предположим, что в файле у вас одна строка:
LeftMouseDownAction=!Execute [!HideMeter BG][!ShowMeter BG2][!ShowMeter BG3][!ShowMeter App1][!ShowMeter App2][!ShowMeter App3][!ShowMeter App4][!ShowMeter App5][!ShowMeter App6][!ShowMeter App7][!ShowMeter App8][!ShowMeter App9][!Redraw]
Если это "многострок", то вместо sl->Strings[0] следует использовать sl->Text.
C++
1
2
3
4
5
6
7
TStringList* sl= new TStringList();
sl->LoadFromFile("test.txt");
sl->Strings[0] = StringReplace(sl->Strings[0],"[!Redraw]","[!ShowMeter App10][!Redraw]",TReplaceFlags()<<rfReplaceAll);
sl->SaveToFile("test.txt");
ShowMessage(sl->Strings[0]); // просто, чтобы посмотреть
delete sl;
sl=NULL;
Добавлено через 2 минуты
Цитата Сообщение от ParadoxX27
вот и туплю
Не святые горшки обжигают .
вместо этого:
C++
1
AnsiString gh=sl->("LeftMouseDownAction=!Execute [!HideMeter BG][!ShowMeter BG2][!ShowMeter BG3][!ShowMeter App1][!ShowMeter App2][!ShowMeter App3][!ShowMeter App4][!ShowMeter App5][!ShowMeter App6][!ShowMeter App7][!ShowMeter App8][!ShowMeter App9][!Redraw]");
в данном случае, если список загружен из файла (или когда необходимо использовать определенную строку, добавленную в список методом Add("строка"), например), следует указывать соответствующую строку списка, содержащую нужный текст:
C++
1
2
AnsiString gh=sl->Strings[НомерНужнойСтроки];
// Нумерация в спиках начинается с ноля
Добавлено через 4 минуты
Почитали бы все же про СтрингЛист, да и ссылка вверху есть, для зеленых .
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.01.2012, 04:35
Помогаю со студенческими работами здесь

Запись в произвольное место в файле
Подскажите пожалуйста, вот использую ofstream для записи в файл, почитал документацию и толком не понял, std::ios::app флаг позволяет...

Перемещение информации в файле в произвольное место
Допустим, есть файл, в котором лежит следующее: а1 c3 d4 b2 Как переставить b2 на второе место без выгрузки информации в...

Запись в определённую строчку и место в текстовом файле
Есть файл bat, вот примерного такого содержания: set a; set b; xcopy &quot;C:\temp\users&quot; &quot;%TARGET%&quot; /S /E xcopy &quot;C:\temp\1&quot;...

Вставка текста в фокусированное место
Я пишу что то подобное редактора и мне нужно чтобы в нужных местах я вставлял допустим смайлы, добавить в конце нет проблем, но как сделать...

В текстовом файле определить самую длинную строку и поставить ее на место первой строки
В текстовом файле определить самую длинную строку и поставить ее на место первой строки а первую на место самой длинной


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru