Usuwanie spacji z ciągu

Usuwanie spacji z ciągu
  • Rejestracja: dni
  • Ostatnio: dni
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:

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

i tak:

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

oraz tak:

Kopiuj
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?

  • Rejestracja: dni
  • Ostatnio: dni
0

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

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
0
Kopiuj
S:= StringReplace(S, ' ', '', [rfReplaceAll]);

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

Kopiuj
S:= StringReplace(S, ',', DecimalSeparator, [rfReplaceAll]);
  • Rejestracja: dni
  • Ostatnio: dni
0
kAzek napisał(a):
Kopiuj
S:= StringReplace(S, ' ', '', [rfReplaceAll]);

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

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

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

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
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

  • Rejestracja: dni
  • Ostatnio: dni
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

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
0

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

MM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 91
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. ;)

  • Rejestracja: dni
  • Ostatnio: dni
0

Konwertowanie:

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

odczyt:

Kopiuj
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;
MA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 12
0

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

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
0

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

Kopiuj
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.

pelsta
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 819
1

To powinno pomóc

Kopiuj
S:= StringReplace(S, ThousandSeparator, '', [rfReplaceAll]);
KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
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.:

Kopiuj
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;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.