Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.19;
Скачать: CL | DM;

Вниз

Что-то я торможу (   Найти похожие ветки 

 
Поручик ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.026 c
1-1102245122
jop
2004-12-05 14:12
2004.12.19
edit


4-1099571832
Arhelon
2004-11-04 15:37
2004.12.19
Как открыть форму чтобы она отображалась по Alt+TAB


1-1101876349
Vladik
2004-12-01 07:45
2004.12.19
Наследование форм и свойства в инспекторе объектов


1-1102057217
denis24
2004-12-03 10:00
2004.12.19
TdateEdit.date


14-1101898281
_}|{yk_
2004-12-01 13:51
2004.12.19
Верховная Рада отправила правительство Януковича в отставку