Answer the question
In order to leave comments, you need to log in
How to work with strings and characters in delphi 2010?
Good day to all!
My question should be easy, but I have been thinking about it for a very long time already.
I wrote the code, it works, but not as it should.
There are two memo fields. One of them contains text with articles.
In another field, list the articles. Help to understand, please, if possible with comments.
====================================
Program code
============ ==========================
procedure TForm1.Button5Click(Sender: TObject);
const
//Word separators.
D = ['|'];
P = [' '];
var
S, sWord, pWord : String;
i, j, Pos2, Len, LenW : Integer;
begin
S := Memo1.lines.Text;
Memo2 Clear;
Memo2.Lines.Add('LLC "Articles"');
Len := Length(S);
Pos2 := 0;
j := 0;
for i := Len downto 1 do begin
//Skip delimiters.
if S[i] in D then Continue;
// Track the end of the word.
if (i = Len) or (S[i + 1] in D) then Pos2 := i;
//Track the beginning of the word.
if (i = 1) or (S[i - 1] in P) then begin
//Ordinal word number:
Inc(j);
//Word length.
LenW := Pos2 - i +1;
//Word.
sWord := Copy(S, i, Lenw);
//Add word information to Memo2.
Memo2.Lines.Add(sWord);
end;
end;
===================================
Text from memo1
============= =======================
Balancer Lucky John CLASSIC 4 + tr. 40mm/19 81401-19|
Balancer Lucky John CLASSIC 4 + tr. 40mm/40 bliste 81401-40|
Balancer Lucky John CLASSIC 5 + tr. 50mm/41 bliste 81501-41|
Balancer Lucky John CLASSIC 5 + tr. 50mm/42 bliste 81501-42|
Balancer Lucky John CLASSIC 6 + tr. 60mm/12HRT bli 81601-12HRT|
Balancer Lucky John CLASSIC 6 + tr. 60mm/36RT Blis 81601-36RT|
Balancer Lucky John CLASSIC 7 + tr. 70mm/47H blister 81701-47H|
Balancer Lucky John FIN 3 + tr. 40mm/42 blister 71313-42|
========================================
Text from memo2 After processing should be
==========================================
81401-19
81401-40
81501- 41
81501-42
81601-12HRT
81601-36RT
81701-47H
71313-42
================================== ========
After processing text from memo2 now
=================================== ======
71313-42
blister 71313-42
40mm/42 blister 71313-42
tr. 40mm/42 blister 71313-42
+ tr. 40mm/42 blister 71313-42
3 + tr. 40mm/42 blister 71313-42
FIN 3 + tr. 40mm/42 blister 71313-42
John FIN 3 + tr. 40mm/42 blister 71313-42
Lucky John FIN 3 + tr. 40mm/42 blister 71313-42
81701-47H
blister 81701-47H
70mm/47H blist 81701-47H
tr. 70mm/47H blist 81701-47H
+ tr. 70mm/47H blist 81701-47H
7 + tr. 70mm/47H blist 81701-47H
CLASSIC 7 + tr. 70mm/47H blist 81701-47H
John CLASSIC 7 + tr. 70mm/47H blist 81701-47H
Lucky John CLASSIC 7 + tr. 70mm/47H bliss 81701-47H
81601-36RT
bliss 81601-36RT
60mm/36RT bliss 81601-36RT
tr. 60mm/36RT Blis 81601-36RT
+ tr. 60mm/36RT Blis 81601-36RT
6 + tr. 60mm/36RT Blis 81601-36RT
CLASSIC 6 + tr. 60mm/36RT Blis 81601-36RT
John CLASSIC 6 + tr. 60mm/36RT Blis 81601-36RT
Lucky John CLASSIC 6 + tr. 60mm/36RT Blis 81601-36RT
81601-12HRT
Blis 81601-12HRT
60mm/12HRT Blis 81601-12HRT
tr. 60mm/12HRT bli 81601-12HRT
+ tr. 60mm/12HRT bli 81601-12HRT
6 + tr. 60mm/12HRT bli 81601-12HRT
CLASSIC 6 + tr. 60mm/12HRT bli 81601-12HRT
John CLASSIC 6 + tr. 60mm/12HRT bli 81601-12HRT
Lucky John CLASSIC 6 + tr. 60mm/12HRT blist 81601-12HRT
81501-42
blist 81501-42
50mm/42 blist 81501-42
tr. 50mm/42 bliste 81501-42
+ tr. 50mm/42 bliste 81501-42
5 + tr. 50mm/42 bliste 81501-42
CLASSIC 5 + tr. 50mm/42 bliste 81501-42
John CLASSIC 5 + tr. 50mm/42 bliste 81501-42
Lucky John CLASSIC 5 + tr. 50mm/42 blist 81501-42
81501-41
blist 81501-41
50mm/41 blist 81501-41
tr. 50mm/41 bliste 81501-41
+ tr. 50mm/41 bliste 81501-41
5 + tr. 50mm/41 bliste 81501-41
CLASSIC 5 + tr. 50mm/41 bliste 81501-41
John CLASSIC 5 + tr. 50mm/41 bliste 81501-41
Lucky John CLASSIC 5 + tr. 50mm/41 bliste 81501-41
81401-40
bliste 81401-40
40mm/40 bliste 81401-40
tr. 40mm/40 bliste 81401-40
+ tr. 40mm/40 bliste 81401-40
4 + tr. 40mm/40 bliste 81401-40
CLASSIC 4 + tr. 40mm/40 bliste 81401-40
John CLASSIC 4 + tr. 40mm/40 bliste 81401-40
Lucky John CLASSIC 4 + tr. 40mm/40 bliste 81401-40
81401-19
40mm/19 81401-19
tr. 40mm/19 81401-19
+ tr. 40mm/19 81401-19
4 + tr. 40mm/19 81401-19
CLASSIC 4 + tr. 40mm/19 81401-19
John CLASSIC 4 + tr. 40mm/19 81401-19
Lucky John CLASSIC 4 + tr. 40mm/19 81401-19
Balancer Lucky John CLASSIC 4 + tr. 40mm/19 81401-19
Answer the question
In order to leave comments, you need to log in
for Index := 0 to Memo1.Count - 1 do
begin
S := Memo1.Lines[Index];
for Index2 := Lenght(S) downto 1 do
if {} S[Index2] = ' ' then
break;
for Index3 := Lenght(s) downto 1 do
if S[Index] <> '|' then Break;
S := Copy(S, Index2, Index3 - Index2);
if S <> '' then
Memo2.Add(S);
end;
procedure GetArticulList;
var
I: Integer;
begin
Memo2.Lines.Clear; //чистим мемо-получатель
Memo2.Lines.Delimiter := '|'; //устанавливаем разделитель
Memo2.Lines.DelimitedText := Memo1.Text; //записываем текст с разделителяим
for I := Memo2.Lines.Count - 1 downto 0 do //начиная с конца удаляем элементы коллекции,
//которые не подходят под маску артикула
begin
//во всех артикулах примера на шестой позиции стоит дефис
if (Copy(Memo2.Lines[I], 6, 1) <> '-') then
begin
Memo2.Lines.Delete(i);
end;
end;
end;
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question