Главная страница
    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.071 c
14-1101895272
АлексейК
2004-12-01 13:01
2004.12.19
Win2003Server


14-1101707365
TButton
2004-11-29 08:49
2004.12.19
LAN


3-1101122826
a3a3ello
2004-11-22 14:27
2004.12.19
Хранимые процедуры в Interbase


1-1101988769
JohnS
2004-12-02 14:59
2004.12.19
Cron Format


11-1084284543
Sakr
2004-05-11 18:09
2004.12.19
Вызов процедуры сразу после Unit1_1.inc





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский