Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
9-1092589159
JUS
2004-08-15 20:59
2004.12.19
Как двигать спрайт...


14-1101666074
OneFragLeft
2004-11-28 21:21
2004.12.19
Net Send


14-1101555931
X9
2004-11-27 14:45
2004.12.19
Софт для радиолюбителя...


4-1099905979
ZedeS
2004-11-08 12:26
2004.12.19
Работа со CMOS в Win XP


14-1101716558
Green_Templar
2004-11-29 11:22
2004.12.19
руссификатор для Windows XP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский