![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте! var text:='0123456789aaabbbccc'; Текст строка, знаю что 100 символов. как передать значение в str:string по 2 символа.
пр: в memo = 01 потом 23 потом 45 и.т.д пока строка (текст) не закончится если можно ПОЖАЛУЙСТА не надо через FOR Можно пару примерчиков Код:
Result := MemoryStream.DataString; until Result <= 0; |
|
#2
|
|||
|
|||
|
или я прошу из ряда фантастики?
|
|
#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
|
|||
|
|||
|
результат:
Цитата:
а нужно Цитата:
как файл загружаешь не сразу а блоками так же и текстовую строку поделить на 5 символов и выводить по 5 символов из 100. а здесь код сразу все выдал. ![]() Последний раз редактировалось leon2009, 08.02.2023 в 21:25. |
|
#5
|
|||
|
|||
|
пример
если text= 11111aa 22222bb 33333cc 44444dd то в коде выше вывод будет Memo1 Цитата:
как есть Цитата:
11111aa потом 22222bb потом 33333cc потом 44444dd |
|
#6
|
|||
|
|||
|
Код:
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
|
|||
|
|||
|
Спасибо!
Цитата:
= Спасибо! правда, я не знал, что так много времени 100 000 срок будет передавать Inc(Idx,wLen);, было 800 000 |
|
#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 в тело цикла. Но это еще более замедлит работу. ЗЫ. Кстати, а нафига оно такое тебе надо? Просто добавление в визульный компонент явно тормозит выполнение... |