Форум: "Основная";
Текущий архив: 2003.01.09;
Скачать: [xml.tar.bz2];
Вниз
Каким образом можно разбить эту строку на подстроки... Найти похожие ветки
← →
georgys (2002-12-26 15:15) [0]Я начинающий программист и вот такой вопрос родился.
Есть вот такая строка сформированная прокси сервером.
192.168.99.254 - oleg [23/Dec/2002:21:15:12 +0300] "GET http://counter.rambler.ru/top100.cnt?294098 HTTP/1.0" 200 936
Как ее разбить на составляющие?
← →
Reindeer Moss Eater (2002-12-26 15:16) [1]Pos, Copy, Delete ......
← →
Song (2002-12-26 15:18) [2]WrapText()
← →
georgys (2002-12-26 15:18) [3]А поподробнее можно? Я пробовал, но у меня получается выдернуть только ip адрес, а все остальное пропадает куда то... :-(
← →
Reindeer Moss Eater (2002-12-26 15:25) [4]А самому поподробнее можно?
Куда пропадает?
← →
georgys (2002-12-26 15:27) [5]
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;
Вот так вот делаю. Но все остальное пропадает.
← →
gek (2002-12-26 15:31) [6]Если ты по пробелам ориентируешься и только то лучше все же
WrapText() и т.п.
Посм в help
← →
Reindeer Moss Eater (2002-12-26 15:32) [7]Что такое N и чему оно равно?
Твой Pos N-раз подряд находит позицию первого пробела.
Зачем это?
← →
georgys (2002-12-26 15:35) [8]n=0;
а почему он только первый пробел ищет?
← →
Reindeer Moss Eater (2002-12-26 15:37) [9]Потому что два параметра у него: что искать и где. Какое по счету вхождение искать он (Pos) не знает.
← →
georgys (2002-12-26 15:41) [10]Так. Но каким же тогда образом мне все это разделить на подстроки и распихать по массивам? Я так понял, что WrapText() мне не подойдет, он же только вместо чего то вставляет другое чего то. А смысл?
← →
Reindeer Moss Eater (2002-12-26 15:44) [11]Имеем строку.
Находим первый пробел слева.
Копируем все что левее пробела в переменную
Удаляем все с начала строки до позиции пробела, включая и его самого.
Начинаем все сначала, не забыв вовремя остановиться
← →
georgys (2002-12-26 15:49) [12]Ага. Понял. Попробую. Спасибо.
← →
Anatoly Podgoretsky (2002-12-26 15:51) [13]georgys © (26.12.02 15:35)
У тебя цикл от 1 до 1, и уже неважно, что у тебя внутри цикла
И тут нельзя искать по пробелу, не все пробелы в данной структуре являются разделителями, есть еще и [] и "..."
← →
Skier (2002-12-26 16:06) [14]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?294098 HTTP/1.0" 200 936");
WriteLn(ATriada.tFirstPart);
WriteLn(ATriada.tSecondPart);
WriteLn(ATriada.tThirdPart);
end;
← →
georgys (2002-12-26 16:07) [15]Спасибо всем большое. У меня уже получилось. Только вот теперь придется каким то образом выдерать ненужные символы.
← →
georgys (2002-12-26 16:15) [16]Спасибо всем большое. У меня уже получилось. Только вот теперь придется каким то образом выдерать ненужные символы.
← →
smok_er (2002-12-26 16:45) [17]а не проще ли воспользоваться регэкспрами?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.01.09;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c