wartości tablicy z TStringList

0

Mam kod, chciałbym zrobić tak aby każda nowa wartość była przypisywana do tablicy (za pomocą TStringList) lub jeśli to możliwe inaczej(np. za pomocą pętli). np 54+628+939+3 chodzi mniej więcej o to:

[0]54
[1]628
[2]939
[3]3

a tutaj mój kod:

procedure TfmCalculator.btnAssignClick(Sender: TObject);
var
  aArray:                               array of Double;
  slNumbers:                            TStringList;
  sOp, S, R, sl:                        String;
  iPosition, ii, len:                   Integer;

begin

  len := Length(eValues.Text);
  sOp := eValues.Text;
  slNumbers := TStringList.Create;

  iPosition := Pos('+', sOp);


begin
while iPosition > 0 do
  begin
    S := Copy(sOp, 1, iPosition - 1);
    slNumbers.Add(S);
    Delete(sOp, 1,iPosition);
    iPosition := Pos('+', sOp);
  end;

  begin
    R := Copy(sOp, 1, Length(sOp));
    slNumbers.Add(R);
    Delete(sOp, 1, Length(sOp));
  end;

end;


ShowMessage(slNumbers.CommaText);


end;

próbowałem za pomocą tej pętli, ale wychodziły pojedyncze znaki char np. 54+32

[0]5
[1]4
[2]0
[3]3
[4]2

a nie o to chodziło, pętla:

SetLength (aArray, Length(slNumbers.CommaText));
    for ii := 1 to Length(aArray) do
      begin
        aArray[ii] := StrToFloat(slNumbers.CommaText[ii]);
      end;
    for ii := 1 to Length(aArray) do
        ShowMessage(aArray[ii].ToString);

Może dałoby się ją jakoś zmodyfikować by spełniała swoje zadanie poprawnie.
Z góry dziękuję

1

aby każda nowa wartość była przypisywana do tablicy (za pomocą TStringList)

Wyjaśnij proszę co powyższe znaczy? Bo to tak brzmi trochę jak "emacs-em przez sendmail"...

1
var
  sl : TStringList;

begin
  sl := TStringList.Create;
  try
    sl.Delimiter := '+';
    sl.DelimitedText := eValue.Text;
    
    ShowMessage(sl.CommaText);
  finally
    sl.Free;
  end;
end;

a dalej to nie wiem co ma być z tą listą. Do tablicy przepisujesz?

0

StringReplace('54+628+939+3','+','\n',[rfReplaceAll])
Jak wpiszesz to do TMemo.Lines, będzie w osobnych wierszach.
Jak wpiszesz to do TLabel.Caption, będzie w osobnych wierszach.
Jak dasz to w MessageBox, będzie w osobnych wierszach.
Jak wypiszesz do konsoli, będzie w osobnych wierszach.

0

chodziło mi o cale liczby.

0

Jak sama nazwa wskazuje StringList czyli lista stringów mozesz tam przypisywać to w ten sposób

Sl.add('50');
Sl.Add('634');
...

Natomiast jak chcesz to potem sumować to helper do tstringlist i funkcja sum

1

@Hoorsey, wygląda mi to na problem XY, co tak naprawdę próbujesz zrobić?

2

@Hoorsey: pewnie, że się da tylko ja nie do końca rozumiem w czym masz problem. Pętle można zrobić ale musi to być jakiś zbiór danych. Analizując natomiast Twój kod dochodzę do wniosku, że to co Ty chcesz zrobić to pobrać z jakiegoś edita (eValues.Text) czy czegoś ciąg znaków w postaci 54+628+939+3 do postaci

sl[0]=54
sl[1]=628
sl[2]=939
sl[3]=3

tak?
a na końcu chcesz to zsumować?
Jeżeli tak to można to zrobić znacznie prościej.
ExtractStrings

  TStringListHelper = class helper for TStringList
  public
    function SumujListe(): integer;
  end;

  procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    ExtractStrings(['+'],[' '],PWideChar(Edit1.Text),sl);
    caption := sl.SumujListe.ToString;
  finally
    sl.Free;
  end;

end;

{ TStringListHelper }

function TStringListHelper.SumujListe: integer;
begin
  Result := 0;
  for var i: integer := 0 to Self.Count -1 do
    Result := Result + Self[i].ToInteger();
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1