|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
как передать по 5 символов из строки 100 символов
Здравствуйте! var text:='0123456789aaabbbccc'; Текст строка, знаю что 100 символов. как передать значение в str:string по 2 символа.
пр: в memo = 01 потом 23 потом 45 и.т.д пока строка (текст) не закончится если можно ПОЖАЛУЙСТА не надо через FOR Можно пару примерчиков Код:
Result := MemoryStream.DataString; until Result <= 0; |
#2
|
|||
|
|||
aфантастика
или я прошу из ряда фантастики?
|
#3
|
|||
|
|||
Код:
const dl=5; //длина передаваемой строки за раз while length(text)>dl do begin s1:=copy(text,1,dl); //считывание символов memo1.lines.add(s1); //вывод символов delete(text,1,dl); //удаление end; memo1.lines.add(text); //вывод оставшихся символов Последний раз редактировалось Vladimr, 08.02.2023 в 14:36. |
#4
|
|||
|
|||
error
результат:
Цитата:
а нужно Цитата:
как файл загружаешь не сразу а блоками так же и текстовую строку поделить на 5 символов и выводить по 5 символов из 100. а здесь код сразу все выдал. Последний раз редактировалось leon2009, 08.02.2023 в 21:25. |
#5
|
|||
|
|||
понял
пример
если text= 11111aa 22222bb 33333cc 44444dd то в коде выше вывод будет Memo1 Цитата:
как есть Цитата:
11111aa потом 22222bb потом 33333cc потом 44444dd |
#6
|
|||
|
|||
error_2
Код:
len:=length(text); while len>dl do begin s1:=copy(text,3,dl); //for i:=0 to len do begin memo1.Lines.add(s1); delete(text,3,dl); end; memo1.Lines.add(text); end; Цитата:
все отлично! т.к символов в строку влазит, но если const dl=5; а это значит что символы в одной строке не влезли не хватает еще 3, то result начинает просто прокручивать до бесконечности. |
#7
|
|||
|
|||
Не справляюсь
Не справляюсь
результат: Цитата:
Цитата:
Код:
function LoadFile(const FileName: TFileName):string; var MemStr: TStringStream; text,s1:string; begin MemStr:= TStringStream.Create; try MemStr.LoadFromFile(FileName); //Result := MemStr.DataString; text:=MemStr.DataString; while length(text)>20 do begin s1:=copy(text,1,20); result:=s1; delete(text,1,20); end; finally MemStr.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin //LoadFile('test.txt'); memo1.Lines.Text:=(LoadFile('test.txt')); end; Последний раз редактировалось leon2009, 08.02.2023 в 22:56. Причина: Не справляюсь |
#8
|
||||
|
||||
Цитата:
Вот здесь Ваше решение не соответствует Вашему же заданию Цитата:
Функция, что Вам предложили, за каждый проход будет отрезать 5 символов и выводить их пока не закончится строка. Если же необходимо выводить блоками, то их нужно где-то накапливать, например в массиве. Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |
#9
|
|||
|
|||
Для начала, я думаю ты "наступаешь" на переводы строк. Их надо вырезать до начала раздела строки, иначе они тебе весь вывод поломают.
Код:
const wLen : Integer = 5; // сколько символов за раз вырезать var Src : String; Idx : Integer; begin Src := '...'; // исходная строка Src := StringReplace(Src, #13, '',[rfReplaceAll]); Src := StringReplace(Src, #10, '',[rfReplaceAll]); Idx := 1; While Idx < Length(Src) Do Begin Memo1.Lines.Add(Copy(Src,Idx,wLen)); Inc(Idx,wLen); End; End; |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
leon2009 (09.02.2023)
|
#10
|
|||
|
|||
спасибо
Спасибо!
Цитата:
|
#11
|
|||
|
|||
Цитата:
Если Length(Src)=Idx, то ничего не выведется. поэтому после цикла while надо будет добавить проверку Код:
if Idx=Length(Src) then Memo1.Lines.Add(Copy(Src,Idx,wLen)); Например Src='a', и Idx=1 то условие while не выполниться и строка не выведется. Последний раз редактировалось Vladimr, 09.02.2023 в 12:39. |
#12
|
|||
|
|||
Цитата:
если это делать через функцию, то вернется только последние символы. К примеру Rdx='01234567890qwertyuiop[]asdfghjkl;'zxcvbnm,./'; то на выходе ты получишь только 'm,./', а все остальное пропадет. Последний раз редактировалось Vladimr, 09.02.2023 в 12:47. |
#13
|
|||
|
|||
Работает
все отлично работает
проверил и так и через функцию. долго, но работает! через Memo и функцию. RichEdit ставил , НО он как накопитель, сначала накопит, а потом все вываливает... а в мемо видны движение... |
#14
|
|||
|
|||
Цитата:
Тут в другом дело. Видимо не успевают проходить сообщения об обновлении интерфейса. Что бы проходили, надо добавить Application.ProcessMessages в тело цикла. Но это еще более замедлит работу. ЗЫ. Кстати, а нафига оно такое тебе надо? Просто добавление в визульный компонент явно тормозит выполнение... |