Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2010, 11:08   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Замена части строки в XML

Как заменить часть строки в большом XML-файле? Возникла необходимосто в изменении пути к файлам. Все бы ничего да 2500 раз менять вручную путь как-то не вариант . Вот, кусок XML файла:
Код:
<Batch BatchID="396">
−
<Doc DocNmb="1" DocType="Договор" DocStatus="" ExportImagesPath="\\Sql11\SCAN2\Scan_BWC_Контракты\Export\396\396_1_1605370.pdf">
−
<Page PageNmb="1" PageType="Договор" PageStatus="(нет ошибок)">
<Field FieldName="DocType">03</Field>
<Field FieldName="Date">19.06.2009</Field>
<Field FieldName="Name">1_1605370</Field>
<Field FieldName="NumWarnSymbols">0</Field>
<Field FieldName="Number contract">1605370</Field>
<Field FieldName="ScanDate">10.08.2010</Field>
</Page>
</Doc>
−
<Doc DocNmb="2" DocType="Реестр" DocStatus="" ExportImagesPath="\\Sql11\SCAN2\Scan_BWC_Контракты\Export\396\396_2_1605370.pdf">
−
<Page PageNmb="2" PageType="Приложение №2" PageStatus="(нет ошибок)">
<Field FieldName="DocType">02</Field>
<Field FieldName="Name">2_1605370</Field>
<Field FieldName="NumWarnSymbols">0</Field>
<Field FieldName="Number contract">1605370</Field>
<Field FieldName="ScanDate">10.08.2010</Field>
</Page>
</Doc>

....
и т.д.
нужно заменить то, что выделено красным цветом на новый путь, который я вручную укажу. Нужно как-то замутить поиск поля ExportImagesPath и произвести замену. Кто что может предложить?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 16.08.2010, 11:30   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
var Inp,OutP:Text;
     s:string;
begin
 AssignFile(Inp,'<путь>');
 AssignFile(OutP,'<путь>');
 Reset(Inp);
 Rewrite(Outp);
 while not EoF(Inp) do 
  begin
   readln(inp,s);
   s:=StringReplace(s,'ExportImagesPath="\\Sql11\SCAN2\Scan_BWC_Контракты\Export\396\396_1_1605370.pdf"'{можно в принципе и сам путь задать},'<новый путь, также с именем параметра{или без, смотря как задавал в первом}>',[rfReplaceAll,rlIgnoreCase]);
   writeln(outp,s);
  end;
 CloseFile(Outp);
 CloseFile(Inp);
end;
может я настолько самокритичен, но мне мой вариант не нравится, не знаю почему
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 16.08.2010 в 11:35. Причина: тэг кода забыл:eek:
Пепел Феникса вне форума Ответить с цитированием
Старый 16.08.2010, 11:34   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Здесь
Код:
AssignFile(Inp,'<путь>');
AssignFile(OutP,'<путь>');
указываем вместо '<путь>' файл, в котором будем делать замену?
А вот в это строчке
Код:
 s:=StringReplace(s,'ExportImagesPath="\\Sql11\SCAN2\Scan_BWC_Контракты\Export\396\396_1_1605370.pdf"'
мне не нужно, чтобы менялось 396_1_1605370.pdf . Должно меняться только то, что находится до 396_1_1605370.pdf, а уже, например, это 396_1_1605370.pdf будут иметь разные имена.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 16.08.2010, 11:37   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Inp это исходный файл, Outp итоговый
пути соответственно.
ну тогда так
Код:
 s:=StringReplace(s,'ExportImagesPath="\\Sql11\SCAN2\Scan_BWC_Контракты\Export\396\',
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.08.2010, 11:49   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Отлично, Пепел , обязательно попробую. Только придется мне завтра из-за этого на работе задержаться, ноут-то мой не хочет работать (
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 16.08.2010, 20:18   #6
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от igh0st Посмотреть сообщение
Еще вариант открыть в редакторе и шандарахнуть Найти/Заменить
Ага, прямо в Delphi
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 17.08.2010, 13:30   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Ну, я вот так пытаюсь сделать:
Код:
procedure TForm1.BtnReplaceClick(Sender: TObject);
var
 Inp, OutP: Text;
 s: string;
begin
 AssignFile(Inp,Form1.Edit1.Text);
 AssignFile(OutP,Form1.Edit1.Text);
 Reset(Inp);
 Rewrite(Outp);
 while not EoF(Inp) do
  begin
   readln(inp,s);
   s:=StringReplace(s, Form1.Edit4.Text,Form1.Edit3.Text,[rfReplaceAll,rlIgnoreCase]);
   writeln(outp,s);
  end;
 CloseFile(Outp);
 CloseFile(Inp);
end;
В Edit4 - путь, который меняем.
В Edit3 - путь, на который меняем.
В Edit1 - путь до файла, в котором меняем.

Но при компиляции выдается ошибка:
Код:
[Error] Unit1.pas(71): Constant or type identifier expected
И показывает на эту строчку:
Код:
 Inp, OutP: Text;
после слова Text

???
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 21.08.2010, 21:29   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

помоему TextFile надо, я не использую паскалевские, потому и не помню.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск и замена части формулы в ячейках mixaxa Microsoft Office Excel 4 02.06.2010 12:59
Замена части значения ячейки maksim_serg Microsoft Office Excel 4 26.03.2010 12:21
Замена шрифта части ячейки bukarenko Microsoft Office Excel 2 25.03.2010 18:43
Замена части формулы по значению ячейки klip Microsoft Office Excel 3 05.03.2010 14:45
Замена части кода при отключённом JavaScript в браузере DJ Triton PHP 7 18.08.2009 19:47