Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Schleife für StringReplace (https://www.delphipraxis.net/70707-schleife-fuer-stringreplace.html)

stoxx 14. Jun 2006 14:43

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

Stevens 16. Jun 2006 09:48

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

Klaus01 16. Jun 2006 10:11

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:

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;
Dein Code:
Delphi-Quellcode:
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;
Grüße
Klaus

Jasocul 16. Jun 2006 10:26

Re: Schleife für StringReplace
 
Zitat:

Zitat von Stevens
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!

Sorry, aber findest du es nicht ein bisschen dreist, sowas zu behaupten und gleichzeitig die Hinweise, die du bekommen hast hier mit aufzunehmen?
Dass es an dem "i" in Pos liegt, wurde dir nämlich erklärt. (Fett hervorgehoben)

Stevens 16. Jun 2006 18:39

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:
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]);
:coder2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:00 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz