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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2011, 18:39   #11
s1s1s1
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 63
По умолчанию

попробуйте кто-нибудь
Код:
 st := TStringList.Create;
          ts := TStringList.Create;
for i:=st.Count-1 downto 0 do 
if Pos('5555',st.Strings[i])>0  then
 for v:=ts.Count-1 downto 0 do
    if Pos('6',ts.Strings[v])>0  then
St[I]:= StringReplace(st[i],st[i],ts[v], [rfReplaceAll]);
так работает ,но не до конца .заменяет все строчки которые надо , но первой строчкой из вторго файла

немного подправлю ваш код:
Код:
 st := TStringList.Create;
  ts := TStringList.Create;
  for i := st.Count - 1 downto 0 do
  begin
    if Pos('5555', st.Strings[i]) > 0 then
    begin
      for v := ts.Count - 1 downto 0 do
      begin
        if Pos('6', ts.Strings[v]) > 0 then
          St[I] := StringReplace(st[i], st[i], ts[v], [rfReplaceAll]);
      end;
    end;
  end;
end;
так компилируется , но когда выполняется этот код выделяется строчка, виснет программа
Код:
if Pos('6', ts.Strings[v]) > 0 then
файл 1
123ууу548
258686ууу
859214723
147820369
ууу147852

файл 2
уу1458885
t21478562
t76714785
1458уу147
уу1478524

должно получиться вот так

файл 1
уу1458885
1458уу147
859214723
147820369
уу1478524
как быть?
s1s1s1 вне форума Ответить с цитированием
Старый 28.03.2011, 14:02   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вот полностью решение:
Код:
procedure TForm1.Button1Click(Sender: TObject);

  function FindNextString(var ts : TStringList; var Index : integer) : string;
  begin
    while (index<ts.Count) do begin
     {внимание - буквы yy - РУССКИЕ!} 
      if Pos(AnsiUpperCase('уу'),AnsiUpperCase(ts.Strings[index] ))=0
         then inc(Index)
         else Break;
    end;
    if (index<ts.Count) {значит нашли очередную строку с YY} then
    begin
      result := ts.Strings[index];
      Inc(index); 
    end
    else
      result := 'строки с YY во втором файле закончились!';
  end;

var ts1, ts2 : TStringList;
  i1, i2 : integer;
  AppDir : string;
begin
  AppDir := ExtractFilePath(ParamStr(0));
  ts1 := TStringList.Create;
  ts2 := TStringList.Create;
  ts1.LoadFromFile(AppDir+'file1');
  ts2.LoadFromFile(AppDir+'file2');

  i2 := 0;
  for i1:=0 to ts1.Count - 1 do begin
     {внимание - буквы yyy - РУССКИЕ!} 
     if Pos(AnsiUpperCase('ууу'),AnsiUpperCase(ts1.Strings[i1] ))>0 then
         ts1.Strings[i1] := FindNextString(ts2, i2);
  end;

  ts1.SaveToFile(AppDir+'file3');
  ShowMessage('Обработанные данные сохранены в '+AppDir+'file3');

  FreeAndNil(ts1);
  FreeAndNil(ts2);
end;
полный проект (исходники, + exe+ примеры файлов) в архиве.
Вложения
Тип файла: rar primer.rar (134.7 Кб, 7 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.03.2011, 16:26   #13
s1s1s1
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 63
По умолчанию

спасибо большое. очень выручили.
s1s1s1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему ошибка? [DCC Error] main.pas(99): E2250 There is no overloaded version of 'StringReplace' ... TwiX Общие вопросы Delphi 5 19.11.2009 03:25
Не заменяет StringReplace Alex Cones Общие вопросы Delphi 2 03.09.2009 21:00