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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2009, 21:00   #11
Terikon
Форумчанин
 
Регистрация: 22.02.2009
Сообщений: 174
По умолчанию

Serge_Bliznykov благадарю вас, вы меня очень выручили это то что мне нужно
Terikon вне форума Ответить с цитированием
Старый 09.04.2009, 23:40   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

всегда пожалуйста. Будут вопросы - обращайтесь!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.04.2009, 01:22   #13
Terikon
Форумчанин
 
Регистрация: 22.02.2009
Сообщений: 174
По умолчанию

Ещё появился вопрос, как мне правильно записать текст в StringList

Код:
var 
a,b,c:string;
...
begin
...
a:=copy...(син)
...
b:=copy...(зел)
...
c:=copy...(красн)
...
Memo2.Lines.Add(a);
Memo2.Lines.Add(b);
Memo2.Lines.Add(c);
В результате я получаю текст из 1 поста в Memo, но нужно обойтись без Memo и сразу записывать данные в StringList
Terikon вне форума Ответить с цитированием
Старый 10.04.2009, 13:15   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

или я не понял, что именно Вам надо, или:
Код:
StringList.Add( copy (...)); {синия}
StringList.Add( copy (...)); {зеленая}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.04.2009, 15:38   #15
Terikon
Форумчанин
 
Регистрация: 22.02.2009
Сообщений: 174
По умолчанию

Делал так:

Код:
t := TStringList.Create;
t.Add(a);
t.Add(b);
t.Add(c);
Memo2.Text:=(t.Text);
Для проверки загружаю в Memo2, в результате в Memo2 добавлялась только одна строка(должно быть около сотни) (id=4563 777 0), Нужно сделать чтобы сначала после обработки в StringList добавились все строки, а потом только уже грузились в Memo2.

Последний раз редактировалось Terikon; 10.04.2009 в 16:03.
Terikon вне форума Ответить с цитированием
Старый 10.04.2009, 15:53   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
сначала после обработки в StringList добавились все строки, а потом только уже грузились в Memo2.
Куда добавились?
Цитата:
Memo2.Text:=(ty.Text);
может имеется ввиду t.Text?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.04.2009, 16:05   #17
Terikon
Форумчанин
 
Регистрация: 22.02.2009
Сообщений: 174
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Куда добавились?

может имеется ввиду t.Text?
Да в t.Text на форуме опечатался, уже исправил.

Добовились из стринглист в мемо

Последний раз редактировалось Terikon; 10.04.2009 в 16:11.
Terikon вне форума Ответить с цитированием
Старый 10.04.2009, 17:13   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы ищите проблему не там, где она есть!
вот попробуйте такой код:
Код:
procedure TForm1.Button4Click(Sender: TObject);
var
  t : TStringList;
  a,b,c : string;
begin
  a := 'aaaaaaa';
  b := 'bbbbbbb';
  c := 'ccccccccccccc';
  t := TStringList.Create;
  t.Add(a);
  t.Add(b);
  t.Add(c);
  Memo2.Text:=(t.Text);
  t.Free;
end;
у меня всё работает как часы!
значит, либо вы не добавляете в TStringList
(проверить, сколько там строк можно через
ShowMessage('count='+IntToStr(t.Cou nt));
)
либо, в цикле переписываете Memo2.Text (присвоение текста автоматически стирает всё то, что было в Memo2 до присвоения!!!!

ну.. или выкладывайте целиком проект - посмотрим, что Вы там напортачили! (p.s. не забудьте перед выкладыванием запаковать необходимые файлы в архив, и выкладывайте только архив!)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.04.2009, 15:43   #19
Terikon
Форумчанин
 
Регистрация: 22.02.2009
Сообщений: 174
По умолчанию

Когда подключаю скрипт Serge_Bliznykova, он выдаёт первую строку из стринг листа вот здесь проект http://slil.ru/27437733
Terikon вне форума Ответить с цитированием
Старый 14.04.2009, 13:16   #20
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну Вы блин и путаник... чем разгрести Ваш парсинг, проще было свой написать!
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  BlockStart, BlockEnd, pos0, pos1 : integer;
  s: string;
  ts: TStringList;
  sSub, s1 : string;
  v, MaxV: integer;
  MaxID: string;

begin
  s := Memo1.Text;
  s := ReplaceStr(s, #$0d#$0a,'');
  BlockStart := Pos('<tr class=row8>',LowerCase(s));
  ts := TStringList.Create;
  while BlockStart > 0 do begin
    BlockEnd := PosEx('</tr>',LowerCase(s),BlockStart);
    if (BlockEnd = 0) then Break;
    sSub := Copy(LowerCase(s), BlockStart, BlockEnd - BlockStart );

    Pos0 := Pos('href=/realty.php?id=', sSub);
    if (Pos0 = 0) then Break;
    Pos1 := PosEx('>', sSub, Pos0+1);
    s1 := Copy(sSub, Pos0 + length('href=/realty.php?id='), Pos1 - length('href=/realty.php?id=') - Pos0 );
    ts.Add(s1);

    Pos0 := PosEx('<td>', sSub, Pos1+1);
    Pos0 := PosEx('<td>', sSub, Pos0+1);
    Pos0 := PosEx('<td>', sSub, Pos0+1);
    if (Pos0 = 0) then Break;
    Pos1 := PosEx(' ', sSub, Pos0);
    s1 := Copy(sSub, Pos0 + Length('<td>'), Pos1 - Length('<td>') - Pos0 );
    ts.Add(s1);

    Pos0 := PosEx('<td>', sSub, Pos0+1);
    if (Pos0 = 0) then Break;
    Pos1 := PosEx('</td>', sSub, Pos0);
    s1 := Copy(sSub, Pos0 + Length('<td>'), Pos1 - Length('<td>') - Pos0 );
    ts.Add(s1);

    BlockStart := PosEx('<tr class=row8>',LowerCase(s),BlockEnd);
  end;

  if ts.Count < 2 then begin
      Application.MessageBox(
        'в файле недостаточно строк',
        'Ошибка', MB_ICONSTOP or MB_OK);
      ts.Free;
      Exit;
    end;
    MaxID := '';
    MaxV := -1 * MaxInt;
    for i := 0 to (ts.Count div 3) - 1 do begin
      try
        s := Trim(ts.Strings[i * 3 + 2]);
        v := StrToInt(s);
        if v <> 0 then begin
          s := Trim(ts.Strings[i * 3 + 1]);
          v := StrToInt(s);
          if v > MaxV then begin
            MaxV := v;
            MaxID := ts.Strings[i * 3];
          end;
        end;
      except
        Application.MessageBox(
          PChar('Неверное число в строке ' + s),
          'Ошибка', MB_ICONSTOP or MB_OK);
        ts.Free;
        Exit;
      end;
    end;
    Application.MessageBox(
      PChar('Максимальное число = ' + IntToStr(MaxV) + ' в блоке с ID=' + MaxID),
      'Сообщение', MB_OK);
    ts.Free;
end;
p.s. а вообще-то есть такая штука как Регулярные выражения. Есть бесплатный компонент для Дельфи
( TRegExpr
Библиотека для Delphi/Kylix/FreePascal)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сравнение данных в двух столбцах в Excel 2003 grinders Microsoft Office Excel 4 25.11.2008 16:58
Сравнение данных из двух книг Excel 2003 ast1r Microsoft Office Excel 2 24.11.2008 21:39
Сравнение данных White БД в Delphi 1 09.09.2008 22:32
Сравнение и перенос данных miheus Microsoft Office Excel 1 29.11.2007 16:42