Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Отсекание чисел в цикле

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

jtyrgyj

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
есть длииинющая строка из чисел
 
например начало такое:
 
617180000256333435947622434359738368343600
 
надо - что бы копировались оттуда числа по два или по три
 
условие копирования - сразу копируется три первых числа - потом проверяется - если трёхзначное число больше 255 - то тогда условие меняется и копируются две цифры (двухзначное число)
 
пробовал начало цикла с пред условием  
 
while (pos(' ', s)> 0) do
 
но при пустом значении (или пробела) оно - либо вообще не работает, либо отрабатывает некорректно
 
проблемы возникают с нулём в строке  
 
как тогда в Делфи вырезать или отсекать их (скопированные прежде числа) - что бы можно было так сделать со всей строкой ?
 
 
 

Всего записей: 7 | Зарегистр. 21-01-2010 | Отправлено: 13:39 05-12-2014 | Исправлено: jtyrgyj, 13:41 05-12-2014
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Тебе нужно копировать в другую строку два или три символа функцией Copy:
function Copy(S: string; Index: Integer; Count: Integer): string;
 
Если же нужно удалить несколько символов из строки, то есть процедура Delete:
procedure Delete(var S: string; Index: Integer; Count: Integer);

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 13:48 05-12-2014
jtyrgyj

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
landy
 
пробовал
 
w:=Copy(s,1,3);
 
далее пробовал отсечь
 
s:=copy(s, pos('4', s), length(s));
 
но не хочет корректно работать
 

Всего записей: 7 | Зарегистр. 21-01-2010 | Отправлено: 13:55 05-12-2014 | Исправлено: jtyrgyj, 13:56 05-12-2014
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
s:=copy(s, pos('4', s), length(s));

После выполнения у тебя s будет равно '435947622434359738368343600', т.е. ты скопировал всю строку, начиная с первого символа 4.  
 

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 14:36 05-12-2014
jtyrgyj

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
landy
 
тогда как правильно их отсекать ?
 
после копирования и вставки - потом просто удалить их из строки ?
 
но проблема с запуском цикла всё равно ведь останется
 
while (pos(' ', s)> 0) do
 
 - при пустом значении не стартует, при пробеле тоже
 
и ещё пробовал посмотреть трассировку - но что-то ничего не показывает.

Всего записей: 7 | Зарегистр. 21-01-2010 | Отправлено: 19:00 06-12-2014 | Исправлено: jtyrgyj, 19:06 06-12-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
procedure proc();
var
    i, step: Integer;
    stri, tmp: String;
begin
    stri := '617180000256333435947622434359738368343600';
    tmp := Copy(stri, 1, 3);
    step := 2;
    if(StrToInt(tmp) > 255) then
        step := 3;
 
    i:= 4;        
    while i < Length(stri) do
    begin
        tmp := Copy(stri, i, step);
        i := i + step;
        WriteLn(tmp);
    end;    
end;

Всего записей: 1580 | Зарегистр. 01-11-2004 | Отправлено: 20:19 06-12-2014
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens, маленькая ошибка - первое число не будет выведено на экран.

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 10:30 08-12-2014
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Отсекание чисел в цикле


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru