![]() |
Re: Schleife für StringReplace
da die Abbruchbedingung der Funktion falsch ist, wenn sich in keine kleinere Einheit mehr umrechnen lässt, hier eine korrekte Version:
Delphi-Quellcode:
function xFloatToSym(Value : Extended) : String;
const S_UNITS = 'afpnµm kMGTP'; var Wert: Extended; Einheit : Integer; begin wert := Value; Einheit := 7; while ( wert < 1 ) and (Einheit > 1) do begin Wert := Wert * 1000; dec(Einheit); end; while (Wert >= 1000) and (Einheit < 12) do begin Wert := Wert / 1000; inc(Einheit) end; Result := Format('%g%s', [Wert, S_Units[Einheit]]); end; // xFloatToSym
Delphi-Quellcode:
st := FloatToSym(0.00000000000002);
Showmessage(st); st := xFloatToSym(0.00000000000002); Showmessage(st); st := FloatToSym(1000000000000000000); Showmessage(st); st := xFloatToSym(1000000000000000000); Showmessage(st); st := FloatToSym(0.00000000000000000001); Showmessage(st); st := xFloatToSym(0.00000000000000000001); Showmessage(st); |
Re: Schleife für StringReplace
Hallo Leute
Häng an meinem Messprogramm fest. Speichere meine Messwerte in einem StringGrid Diese werden dort mit einem Zahlen- Wert und dem zugehörigen Faktor gespeichert. z.B. 390 µ oder 900n Jetzt will Ich diese Werte in einem Chart anzeigen lassen, was auch ohne µ oder n funktioniert. Ist klar das Delphi mir jetzt aber sagt 390 µ ist kein gültiger Gleitkommawert. Habs jetzt so versucht:
Delphi-Quellcode:
for i := (StringGrid1.Rowcount-z) to StringGrid1.Rowcount-1 do begin while Pos('µ', i) > 0 do Delete(i,Pos('µ', i),1); Series1.Addxy(........) ... ... end; Funktioniert, nicht! Fehlermeldung: Inkompatible Typen Hab die Frage schon in einem anderen Forum gestellt. Liegt an dem i in der pos(). Ist der Schleifenzähler.Nur was muss da rein? StringGrid.cells[2,i] ? Da wird mir angezeigt, dass Konstantenobjekt kann nicht als var- Parameter übergeben werden. Vielleicht kann man mir hier helfen. In anderen Foren kriegt man nur dumme Sprüche und keine Tipps! Was ist mein Fehler?? |
Re: Schleife für StringReplace
Angenommen Deine Werte stehen in der ersten Spalte Deines StringGrids
Dann sollte das alles ungefähr so aussehen.
Delphi-Quellcode:
Dein Code:for row := (StringGrid1.Rowcount-z) to StringGrid1.Rowcount-1 do begin s:=StringGrid1.cells[row,0]; for j:=1 to length(Stringgrid1.cells[row,0]) do begin if s[j] = 'µ' then s[j] := ' '; end; StringGrid1.cells[row,0]:=s; end;
Delphi-Quellcode:
Grüße
for i := (StringGrid1.Rowcount-z) to StringGrid1.Rowcount-1 do // i ist eine Zählvariable (Typ: integer oder byte)
begin while Pos('µ', i) > 0 do // i ist nicht der String in dem Du µ suchst, mal in der OH pos anschauen Delete(i,Pos('µ', i),1); // i ist nicht der String aus dem Du | rauslöschen willst, mal in der OH delete anschauen Series1.Addxy(........) ... ... end; Klaus |
Re: Schleife für StringReplace
Zitat:
Dass es an dem "i" in Pos liegt, wurde dir nämlich erklärt. (Fett hervorgehoben) |
Re: Schleife für StringReplace
Geschafft! :bounce1:
Danke für die Hilfe, insbesonderem Klaus01. Das war der richtige Ansatz, bzw. fast die Lösung! Hier mal der nun funktionierende Quellcode
Delphi-Quellcode:
:coder2:
else
for i:=(Form1.StringGrid1.Rowcount-z) to (Form1.StringGrid1.Rowcount-1) do begin begin s:=Form1.StringGrid1.cells[2,i]; for j:=1 to length(Form1.Stringgrid1.cells[2,i]) do begin if s[j] = 'µ' then s[j] := ' '; end; Form1.StringGrid1.cells[2,i]:=s; series1.addxy(i,Strtofloat(s),Form1.StringGrid1.cells[1,i]); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz