Форум: "Основная";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
ВнизЧто-то я торможу ( Найти похожие ветки
← →
Поручик © (2004-12-07 00:14) [0]Почему появляется AV в таком коде:
For i:=1 to LENGTH(sSource) do
begin
if sSource[i] <> "#13" then
sSend[i] := sSource[i]
else
DelBeg(length(sSend)+1);
end;
← →
Поручик © (2004-12-07 00:15) [1]Блин, глючный клиент! Чтоб..
sSource и sSend - string
← →
Поручик © (2004-12-07 00:18) [2]Поганый клиент!!!
AV выскакивает на четвертой строчке.
← →
SergP © (2004-12-07 00:22) [3]А может на третей?
if sSource[i] <> "#13" then
← →
Поручик © (2004-12-07 00:26) [4]SergP © (07.12.04 0:22) [3]
if sSource[i] <> "#13" then
Нет! Что с апострофами, что без вываливается. Сначало работало без апострофов, потом что-то начал ругаться на эту строчку, я их поставил. А так что ставь, что убирай - результат один - AV в четвертой строчке.
По идее должно быть все нормально, а AV :(
← →
Anatoly Podgoretsky © (2004-12-07 00:28) [5]Длина sSend < sSource
← →
Anatoly Podgoretsky © (2004-12-07 00:30) [6]А это вообще абсурд sSource[i] <> "#13" сравнивать символ со строкой, убери кавычки.
← →
Поручик © (2004-12-07 00:30) [7]Забыл инициализировать, спасибо Анатолий.
← →
Поручик © (2004-12-07 00:32) [8]Когда инициализирую и убираю кавычки то ругается - AV;
а с кавычками работает, правда не уверен, что правильно, сейчас проверю
← →
Поручик © (2004-12-07 00:37) [9]Anatoly Podgoretsky © (07.12.04 0:30) [6]
А это вообще абсурд sSource[i] <> "#13" сравнивать символ со строкой
Да, пора спать, что-то я сразу не понял что это строка будет такая #13, а не символ...
Спокойной ночи.
← →
SergP © (2004-12-07 00:37) [10]
> DelBeg
А что это за процедура?
← →
SergP © (2004-12-07 00:39) [11]
> [8] Поручик © (07.12.04 00:32)
> Когда инициализирую и убираю кавычки то ругается - AV;
> а с кавычками работает, правда не уверен, что правильно,
> сейчас проверю
Кстати скажи что этот код должен делать, тогда будет понятнее.
← →
Поручик © (2004-12-07 00:48) [12]SergP © (07.12.04 0:37) [10]
А что это за процедура?
Удаляет часть строки, которая прочитанна.
SergP © (07.12.04 0:39) [11]
Кстати скажи что этот код должен делать, тогда будет понятнее.
Этот код должен брать из строки все символы пока не встретит #13 и копировать их в другую переменную, с которой я работаю.
← →
Поручик © (2004-12-07 00:56) [13]Короче завтра перепишу на свежую голову алгоритм, и делу конец.
А вообще пишу бота для одной онлайновой игры.
← →
SergP © (2004-12-07 01:02) [14]
> Удаляет часть строки, которая прочитанна.
Какой строки?
если sSource, то нехорошо получается когда цикл у тебя For i:=1 to LENGTH(sSource) а саму переменную sSource ты укорачиваешь в теле цикла.
> Этот код должен брать из строки все символы пока не встретит
> #13 и копировать их в другую переменную, с которой я работаю.
Т.е если я правильно понял из твоего описания (но не из кода) то он должен брать символы до первого появления #13, засунуть получившийся кусок в другую переменную и "отрезать" от переменной с исходным текстом этот же кусок + #13?
Если так, то:
i:=pos(#13,sSource+#13);
sSend:=copy(sSource,1,i-1);
delete(sSource,1,i);
← →
TButton © (2004-12-07 01:03) [15]
> А вообще пишу бота для одной онлайновой игры.
респект.
← →
Поручик © (2004-12-07 08:04) [16]SergP © (07.12.04 1:02) [14]
если sSource, то нехорошо получается когда цикл у тебя For i:=1 to LENGTH(sSource) а саму переменную sSource ты укорачиваешь в теле цикла.
Котелок вчера не варил, после DelBeg должен идти break
SergP © (07.12.04 1:02) [14]
i:=pos(#13,sSource+#13);
sSend:=copy(sSource,1,i-1);
delete(sSource,1,i);
Спасиб, я вчера сначала так хотел сделать, но не сдалал, ошибки какие-то были.
← →
SergP © (2004-12-07 08:43) [17]
> Котелок вчера не варил, после DelBeg должен идти break
ага...
← →
begin...end © (2004-12-07 09:12) [18]> [12] Поручик © (07.12.04 00:48)
> Этот код должен брать из строки все символы пока не встретит
> #13 и копировать их в другую переменную, с которой я работаю.
Как вариант:var
sSource, sSend: String;
P: Integer;
begin
P := Pos(#13, sSource);
if P > 0 then
sSend := LeftStr(sSource, P - 1)
end.
← →
begin...end © (2004-12-07 09:13) [19]Забыл сказать: LeftStr находится в модуле StrUtils.
← →
Ega23 © (2004-12-07 09:44) [20]
var
s1,s2:String;
i:Integer;
begin
s2:="";
for i:= 1 to Length(s1) do
if s1[i]<>#13 then s2:=s2+s1[i];
end;
?
← →
begin...end © (2004-12-07 09:51) [21]> [20] Ega23 © (07.12.04 09:44)
Ну а Break где?
← →
Ega23 © (2004-12-07 10:01) [22]begin...end © (07.12.04 09:51) [21]
А... Не разобрался, что автору нужно...
← →
begin...end © (2004-12-07 10:13) [23]> [22] Ega23 © (07.12.04 10:01)
Не совсем по теме, но вот ещё интересный момент:var
s1, s2, s3: String;
I, J: Integer;
t1, t2: Cardinal;
begin
// Делаем большущую строку
s1 := DupeString("x", 1000000) + #13 + "x";
// Вариант с последовательным прибавлением символов
t1 := GetTickCount;
s2 := "";
for I := 1 to Length(s1) do
if s1[I] <> #13 then s2 := s2 + s1[I];
t1 := GetTickCount - t1;
// Вариант с предварительной установкой длины строки и последующим усечением
t2 := GetTickCount;
SetLength(s3, Length(s1));
J := 0;
for I := 1 to Length(s1) do
if s1[I] <> #13 then
begin
Inc(J);
s3[J] := s1[I];
end;
SetLength(s3, J);
t2 := GetTickCount - t2;
ShowMessageFmt("Ega23: %d, begin...end: %d", [t1, t2])
end.
Выполни, будешь удивлён :-)
Такое, конечно, будет сильно заметно только для больших строк, но кто знает, чего там Поручик намутил :-)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.038 c