Usuwanie spacji z ciągu

0

Witam. W stringgridzie mam liczbę formatowaną za pomocą funkcji FloatToStrF. ładnie mi wyświetla liczbę w postaci 1 000,00 jednak do sumowania wartości muszę pozbyć się tego odstępu aby przekonwertować string do float.
próbowałem zrobić to tak:

while Pos(' ', S) > 0 do
    Delete(S, Pos(' ', S), 1);

i tak:

S := stringReplace(S, ' ', '', [rfReplaceAll]);

oraz tak:

S := stringReplace(S, #32, '', [rfReplaceAll]);

lecz żaden z powyższych sposobów nie przyniósł interesującego mnie rezultatu czyli liczby w formacie 1000,00

macie jakieś pomysły?

0

Przepraszam ale nie ogarnąłem bbCode. Mój błąd. Następnym razem będzie ok.

0
S:= StringReplace(S, ' ', '', [rfReplaceAll]);

Co do przecinka to przed konwersją dla bezpieczeństwa zastosowałbym jeszcze:

S:= StringReplace(S, ',', DecimalSeparator, [rfReplaceAll]);
0
kAzek napisał(a):
S:= StringReplace(S, ' ', '', [rfReplaceAll]);

Co do przecinka to przed konwersją dla bezpieczeństwa zastosowałbym jeszcze:

S:= StringReplace(S, ',', DecimalSeparator, [rfReplaceAll]);

Twój sposób również nie zadziałał. Liczba nadal wyświetlana jest w formacie 1 000,00

0

Masakra a do zmiennej s chociaż przekazałeś zawartość komórki (tą liczbę)? Gdzie jest nadal wyświetlana jako 1 000,00 ? W StringGrid? Przecież aby to zmienić to trzeba ją po tym z powrotem przekazać do komórki wartość ze zmiennej S samo to się nie zmieni. Natomiast wartość zmiennej S (po użyciu StringReplace jak napisałem wyżej) możesz spokojnie skonwertować na liczbę funkcją StrToFloat

0
kAzek napisał(a):

Masakra a do zmiennej s chociaż przekazałeś zawartość komórki (tą liczbę)? Gdzie jest nadal wyświetlana jako 1 000,00 ? W StringGrid? Przecież aby to zmienić to trzeba ją po tym z powrotem przekazać do komórki wartość ze zmiennej S samo to się nie zmieni.

jak bym tego nie zrobił to bym nie pisał, że nie działa

0

Musi działać nie wiem jakich głupot tam narobiłeś pokaż całość kodu jak pobierasz z komórki liczbę i konwertujesz.

0

to może skorzystaj z funkcji ReplaceStr (np. S := ReplaceStr(S,' ',''); i podobnie z separatorem dziesiętnym) z StrUtils(dociekliwi mogą zarzucić jeszcze, że można skorzystać z AnsiStrings). Warto jeszcze sprawdzić, czy gdzieś nie dodałeś np. znaku końca linii lub zaplątał Ci się jeszcze symbol waluty, procent itp. ;)

0

Konwertowanie:

Main.Tabela.Cells[6,1] := FloatToStrF(Main.Kwota.Text, ffNumber, 7, 2);

odczyt:

procedure TMain.Button3Click(Sender: TObject);
var
  S : String;
begin
  S := Main.Tabela.Cells[6,1];
  
  //kod usuwający odstęp w liczbie

  ShowMessage(S);
end;
0

i do tego jeszcze oczywiście w zapisie do grida jest StrToFloat(Man.Kwota.Text)

0

Tam masz chyba wrzucone jakieś"śmieciowe" znaki ale wystarczy:

function DeleteNoFloatFrmtChars(AStr: string): string;
var
  i: Integer;
begin
  result:= '';
  for i:=1 to Length(AStr) do
    if AStr[i] in ['0'..'9', ','] then
      result:=  result + AStr[i];
end;

i będzie ok.

1

To powinno pomóc

S:= StringReplace(S, ThousandSeparator, '', [rfReplaceAll]);
1

Tak, na pewno zadziała z tym że w nowszych Delphi nie ma zmiennej ThousandSeparator tylko wszystkie zmienne do Formatowania z zależności od ustawień systemowych są w rekordzie TFormatSettings czyli trzeba np.:

var
  fs: TFormatSettings;
  S: string;
begin
  StringGrid1.Cells[1,1]:= FloatToStrF(1000, ffNumber, 7, 2);
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, fs);
  S:= StringGrid1.Cells[1,1];
  S:= StringReplace(S, fs.ThousandSeparator, '', [rfReplaceAll]);
  ShowMessage(S);
end;

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