Witam,
Mam następujący problem do rozwiązania kopiuje dane ze TMemo1 do TMemo2
W TMemo1 ma np:
1532
1520
152’
1530
15*
Jak zapewnić aby do TMemo 2 skopiowane zostały dane które są tylko liczba tzn nie zawierają jakich innych znaków specjalnych
Witam,
Mam następujący problem do rozwiązania kopiuje dane ze TMemo1 do TMemo2
W TMemo1 ma np:
1532
1520
152’
1530
15*
Jak zapewnić aby do TMemo 2 skopiowane zostały dane które są tylko liczba tzn nie zawierają jakich innych znaków specjalnych
sposobów mnóstwo, np prosta funkcja:
function TylkoCyfry(S: string): string;
var
i: Byte;
begin
i := 1;
while i <= Length(S) do
if S[i] in ['0'..'9'] then
Inc(i)
else
Delete(S, i, 1);
Result := S;
end;
zaleta taka, że łatwo możesz rozszerzyć znaki które chcesz skopiować
Mniejsze juz sie nie da
function JestemCyfra(const AString: string): Boolean;
begin
Result := StrToIntDef(AString, 0 ) = StrToIntDef(AString, 1);
end;
Ja to rozumiem tak:
for var i := 0 to memo1.Lines.Count - 1 do
if TryStrToFloat(memo1.Lines[i], output) then
Memo2.Lines.Add(memo1.Lines[i]);
Do sprawdzania czy da się przekonwertować ciąg znaków na liczbę całkowitą słyży funkcja TryStrToInt
, która nie rzuca błędu, jeśli ciąg zawiera niedozwolone znaki. W tym przypadku minusem jest konieczność podania drugiego parametru, którego i tak nie będziemy wykorzystywać (no ale podać trzeba).
var
Line: String;
Dummy: Integer;
begin
Memo2.Clear();
Memo2.Lines.BeginUpdate();
try
for Line in Memo1.Lines do
if TryStrToInt(Line, Dummy) then
Memo2.Lines.Add(Line);
finally
Memo2.Lines.EndUpdate();
end;
end;
Dzięki robrtz68 już dziala