Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Каким образом можно разбить эту строку на подстроки... [D6, Win2k, WinXP]


georgys ©   (2002-12-26 15:15:00) 

Я начинающий программист и вот такой вопрос родился.
Есть вот такая строка сформированная прокси сервером.

192.168.99.254 - oleg [23/Dec/2002:21:15:12 +0300] "GET http://counter.rambler.ru/top100.cnt?294098HTTP/1.0" 200 936

Как ее разбить на составляющие?


smok_er   (2002-12-26 16:45:00) [1]

а не проще ли воспользоваться регэкспрами?


georgys   (2002-12-26 16:15:00) [2]

Спасибо всем большое. У меня уже получилось. Только вот теперь придется каким то образом выдерать ненужные символы.


georgys   (2002-12-26 16:07:00) [3]

Спасибо всем большое. У меня уже получилось. Только вот теперь придется каким то образом выдерать ненужные символы.


Skier   (2002-12-26 16:06:00) [4]

TTriada = packed record
tFirstPart : String;
tSecondPart : String;
tThirdPart : String;
end;

//...................

procedure TForm1.Button3Click(Sender: TObject);

function SplitStr(const AStrToSplit : String) : TTriada;
var
AHTTPPos : Integer;
ii : Integer;
begin
FillChar(Result, SizeOf(TTriada), 0);
if AStrToSplit = EmptyStr then Exit;
AHTTPPos := Pos("http:", AStrToSplit);
if AHTTPPos = 0 then Exit;
ii := AHTTPPos;
while AStrToSplit[ii] <> " " do begin
Result.tSecondPart := Result.tSecondPart + AStrToSplit[ii];
Inc(ii);
end; //while
Result.tFirstPart := Copy(AStrToSplit, 1, AHTTPPos - 1);
Result.tThirdPart := Copy(AStrToSplit, ii, Length(AStrToSplit));
end;

var
ATriada : TTriada;
begin
ATriada := SplitStr("192.168.99.254 - oleg [23/Dec/2002:21:15:12 +0300] "GET http://counter.rambler.ru/top100.cnt?294098HTTP/1.0" 200 936");
WriteLn(ATriada.tFirstPart);
WriteLn(ATriada.tSecondPart);
WriteLn(ATriada.tThirdPart);
end;


Anatoly Podgoretsky   (2002-12-26 15:51:00) [5]

georgys © (26.12.02 15:35)
У тебя цикл от 1 до 1, и уже неважно, что у тебя внутри цикла
И тут нельзя искать по пробелу, не все пробелы в данной структуре являются разделителями, есть еще и [] и "..."


georgys   (2002-12-26 15:49:00) [6]

Ага. Понял. Попробую. Спасибо.


Reindeer Moss Eater   (2002-12-26 15:44:00) [7]

Имеем строку.
Находим первый пробел слева.
Копируем все что левее пробела в переменную
Удаляем все с начала строки до позиции пробела, включая и его самого.
Начинаем все сначала, не забыв вовремя остановиться


georgys   (2002-12-26 15:41:00) [8]

Так. Но каким же тогда образом мне все это разделить на подстроки и распихать по массивам? Я так понял, что WrapText() мне не подойдет, он же только вместо чего то вставляет другое чего то. А смысл?


Reindeer Moss Eater   (2002-12-26 15:37:00) [9]

Потому что два параметра у него: что искать и где. Какое по счету вхождение искать он (Pos) не знает.


georgys   (2002-12-26 15:35:00) [10]

n=0;

а почему он только первый пробел ищет?


Reindeer Moss Eater   (2002-12-26 15:32:00) [11]

Что такое N и чему оно равно?
Твой Pos N-раз подряд находит позицию первого пробела.
Зачем это?


gek   (2002-12-26 15:31:00) [12]

Если ты по пробелам ориентируешься и только то лучше все же
WrapText() и т.п.
Посм в help


georgys   (2002-12-26 15:27:00) [13]


while NOT EOF(f) do begin
readln(f,s);
for i:=1 to n+1 do begin
p:=pos(" ",s);
buf:=copy(s,p+1,Length(s)-p);
end;
Memo1.Lines.Add(buf);
end;


Вот так вот делаю. Но все остальное пропадает.


Reindeer Moss Eater   (2002-12-26 15:25:00) [14]

А самому поподробнее можно?
Куда пропадает?


georgys   (2002-12-26 15:18:00) [15]

А поподробнее можно? Я пробовал, но у меня получается выдернуть только ip адрес, а все остальное пропадает куда то... :-(


Song   (2002-12-26 15:18:00) [16]

WrapText()


Reindeer Moss Eater   (2002-12-26 15:16:00) [17]

Pos, Copy, Delete ......


Наверх

Титульная страница Поиск, карта сайта Написать письмо