Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Cellen im Stringgrid zusammenrechnen (https://www.delphipraxis.net/115324-cellen-im-stringgrid-zusammenrechnen.html)

SaFu 10. Jun 2008 12:37


Cellen im Stringgrid zusammenrechnen
 
Tach

Stehe mal wieder vor einem Problem und zwar versuche ich gewisse Zellen im StringGrid zusammen zu addieren

Folgendes wenn in Spalte Way der String OUT vorkommt (hab ich auch soweit), dann soll in der Spalte Zahlx die jweilige Zeile in der, der String OUT gefunden wurde der Wert der Spalte Zahlx zusammen gezählt werden

Delphi-Quellcode:
 procedure findStrings(sl:TStrings);
var i :Integer;
begin
 for i := 1 to Pred(sl.Count)-1 do
  if (sl[i]) = 'OUT' then
   begin
   
   end
end;

procedure TForm1.Button6Click(Sender: TObject);
Var i : integer;
begin
 for I := 0 to StringGrid1.RowCount - 1 do
  if StringGrid1.Cells[i,0] = 'Way' then
      findStrings(StringGrid1.Cols[i]);

end;
Hoffe ich habe es verständlich erklärt

mkinzler 10. Jun 2008 12:39

Re: Cellen im Stringgrid zusammenrechnen
 
Du musst die Inhalte von String in einen Integer- oder Float-Typ Casten
(TryStringToFloat, StringToFloatDef)

SaFu 10. Jun 2008 12:44

Re: Cellen im Stringgrid zusammenrechnen
 
Ja besser wär float da ic komma stellen habe

Aber wo mache ich das am besten daran scheitert es auch gerade

mkinzler 10. Jun 2008 12:46

Re: Cellen im Stringgrid zusammenrechnen
 
Beachte die Funktionen in der Klammer

SaFu 10. Jun 2008 12:52

Re: Cellen im Stringgrid zusammenrechnen
 
Welche die

Delphi-Quellcode:
findStrings(sl:TStrings);
die müsste dann noch erweitert werden oder??

mkinzler 10. Jun 2008 13:06

Re: Cellen im Stringgrid zusammenrechnen
 
Ja

SaFu 10. Jun 2008 13:16

Re: Cellen im Stringgrid zusammenrechnen
 
ok

muss ich dann noch eine zweite schleife mit einbinden

Delphi-Quellcode:

procedure TForm1.Button6Click(Sender: TObject);
Var i,x : integer;
begin
 for I := 0 to StringGrid1.RowCount - 1 do
  if StringGrid1.Cells[i,0] = 'Way' then
   if StringGrid1.Cells[x,0] = 'Switch' then

      findStrings(StringGrid1.Cols[i],StringGrid1.Cols[x]);
end;
und die werte in der funktion weiter verarbeiten

SaFu 10. Jun 2008 14:10

Re: Cellen im Stringgrid zusammenrechnen
 
So jetzt bin ich schonmal weiter und hab die einträge aus der spalte in meiner Stringlist

jetzt hab ich nur zwei Proble

1 Es wird nicht nur der wert der Zeile ind OUT steht übergeben sondern alle

2 Wie Rechne ich dann alles zusammen

So hab ich es jetzt
Delphi-Quellcode:
procedure findStrings(sl:TStrings;s:TStrings);
var i :Integer;
    ergebnis :Tstrings;
begin
 ergebnis:= TStringList.Create;
  try
   for i := 1 to Pred(sl.Count)-1 do
    if (sl[i]) = 'OUT' then
     begin
      ergebnis.AddStrings(s);
     end;
    ergebnis.saveToFile('C:\test.txt');
   finally
  ergebnis.Free;
  end;
end;

procedure TForm1.Button6Click(Sender: TObject);
Var i,x : integer;
begin
 for I := 0 to StringGrid1.RowCount - 1 do
  if StringGrid1.Cells[i,0] = 'Way' then
   for x := 0 to StringGrid1.RowCount -1 do
   if StringGrid1.Cells[x,0] = 'Switch' then

      findStrings(StringGrid1.Cols[i],StringGrid1.Cols[x]);
end;

DeddyH 10. Jun 2008 14:16

Re: Cellen im Stringgrid zusammenrechnen
 
Zitat:

Delphi-Quellcode:
for I := 0 to StringGrid1.RowCount - 1 do
  if StringGrid1.Cells[i,0] = 'Way' then
   for x := 0 to StringGrid1.RowCount -1 do

Bist Du sicher, dass Du beide Male auf RowCount zugreifen willst?

SaFu 10. Jun 2008 14:18

Re: Cellen im Stringgrid zusammenrechnen
 
Ja schon die In der 1 Zeile steht meine überschrift da geh ich durch wo dieser string steht und und versuche diese werte zu übergeben aber nur die werte in der OUT steht und diese stehen in der Spalte bei SwichedDuration

mkinzler 10. Jun 2008 14:20

Re: Cellen im Stringgrid zusammenrechnen
 
Aber warum dann 2 geschachtelte Schleifen mit den selben Grenzen?

SaFu 10. Jun 2008 14:22

Re: Cellen im Stringgrid zusammenrechnen
 
Na ich glaube dann habe ich einen Denk fehler drin hab gedacht das der Rest die funktion übernimmt aber anscheinend nicht :lol:

SaFu 10. Jun 2008 14:42

Re: Cellen im Stringgrid zusammenrechnen
 
OK

jetzt bekomme ich die nur die ergebnisse die in der zeile mit Out stehen in die StringList wie Rechne ich die jetzt zusammen jetzt brauch ich aber wirklich eure hilfe das weis ich nicht, hab ja gezeigt das ich will oder

Delphi-Quellcode:
procedure findStrings(sl:TStrings;s:TStrings);
var i :Integer;
    ergebnis :Tstrings;
begin
ergebnis:= TStringList.Create;
  try
   for i := 1 to Pred(sl.Count)-1 do
    if (sl[i]) = 'OUT' then
     begin
      ergebnis.Add(s[i]); //hier die änderung
     end;
    ergebnis.saveToFile('C:\test.txt');
   finally
  ergebnis.Free;
  end;
end;

DeddyH 10. Jun 2008 15:01

Re: Cellen im Stringgrid zusammenrechnen
 
Delphi-Quellcode:
function findStrings(sl:TStrings;s:TStrings): double;
var i :Integer;
    ergebnis :Tstrings;  
begin
  Result := 0;
  ergebnis:= TStringList.Create;
  try
   for i := 1 to Pred(sl.Count)-1 do
    if (sl[i]) = 'OUT' then
     begin
      ergebnis.Add(s[i]); //hier die änderung
      Result := Result + StrToFloatDef(s[i],0); //hier die Ergänzung
     end;
    ergebnis.saveToFile('C:\test.txt');
   finally
  ergebnis.Free;
  end;
end;
Allerdings ist Deine Vorgehensweise nicht ganz ungefährlich, da s mindestens so viele Einträge wie sl enthalten muss, sonst knallt es.

SaFu 10. Jun 2008 15:04

Re: Cellen im Stringgrid zusammenrechnen
 
Die zwei Spalten stehen in Beziehung zueinander ohne OUT gibts auch keine Switch

SaFu 10. Jun 2008 15:14

Re: Cellen im Stringgrid zusammenrechnen
 
Wenn ich mir das ergebnis im Label anzeigen lasse ist es = 0??

DeddyH 10. Jun 2008 15:24

Re: Cellen im Stringgrid zusammenrechnen
 
Dann klappt das Umwandeln in Float anscheinend nicht. Was steht denn drin?

SaFu 10. Jun 2008 15:27

Re: Cellen im Stringgrid zusammenrechnen
 
Einfach nur 0

oder mache ich es falsch

Delphi-Quellcode:
Label3.Caption FloatToStr(FindStrings(Stringgrid1................usw.

DeddyH 10. Jun 2008 15:35

Re: Cellen im Stringgrid zusammenrechnen
 
Ich meinte, was steht in den Zellen, die Du addieren willst?

SaFu 10. Jun 2008 15:38

Re: Cellen im Stringgrid zusammenrechnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Achso

Kommawerte siehe Anhang

DeddyH 10. Jun 2008 15:39

Re: Cellen im Stringgrid zusammenrechnen
 
Die stehten aber wohl mit dem falschen Decimalseparator drin (im Deutschen das Komma).

SaFu 10. Jun 2008 15:43

Re: Cellen im Stringgrid zusammenrechnen
 
Wie, wo, wat, keine Ahnung was du meinst sorry.

Aber ich lasse es mir gerne erklären

Fussball-Robby 10. Jun 2008 15:44

Re: Cellen im Stringgrid zusammenrechnen
 
Möglicherweise reicht ein kleines
Delphi-Quellcode:
Decimalseparator := '.';
Du musst dem Programm erst sagen, dass Kommazahlen durch einen Punkt (.) getrennt sind, da es normalerweise das Komma (,) ist.

mkinzler 10. Jun 2008 15:45

Re: Cellen im Stringgrid zusammenrechnen
 
StrToInt erwartet ',' als Dezimaltrenner

SaFu 10. Jun 2008 15:46

Re: Cellen im Stringgrid zusammenrechnen
 
Sorry wenn ich es jetzt versuche mir leicht zu machen aber wo denn :pale:

Fussball-Robby 10. Jun 2008 15:47

Re: Cellen im Stringgrid zusammenrechnen
 
Zitat:

Zitat von fuknersascha
Sorry wenn ich es jetzt versuche mir leicht zu machen aber wo denn :pale:

Wo du den Dezimalseperator setzen musst? Im OnCreate wäre es wohl am besten aufgehoben.

mkinzler 10. Jun 2008 15:49

Re: Cellen im Stringgrid zusammenrechnen
 
Hohe Kunst des Programmierers ist es die Hilfe (F1) zu benutzen.

Zitat:

Wo du den Dezimalseperator setzen musst? Im OnCreate wäre es wohl am besten aufgehoben.
Nein, dann könnte es im Zweifelfall wieder zurückgestellt worden sin. Entweder direkt vor der Konvertierung oder, wenn in der Delphiversion vorhanden, die überladene Variante wählen

DeddyH 10. Jun 2008 15:51

Re: Cellen im Stringgrid zusammenrechnen
 
Erweitern wird das Ganze mal ein wenig:
Delphi-Quellcode:
function findStrings(sl:TStrings;s:TStrings;cSeparator: char = '.'): double;
var i :Integer;
    ergebnis :Tstrings;
    OldSep: char;  
begin
  OldSep := DecimalSeparator; //Sichern des alten Zustandes
  DecimalSeparator := cSeparator; //Umstellen des Dezimalseparators
  Result := 0;
  ergebnis:= TStringList.Create;
  try
   for i := 1 to Pred(sl.Count)-1 do
    if (sl[i]) = 'OUT' then
     begin
      ergebnis.Add(s[i]); //hier die änderung
      Result := Result + StrToFloatDef(s[i],0); //hier die Ergänzung
     end;
    ergebnis.saveToFile('C:\test.txt');
   finally
  ergebnis.Free;
  end;
  DecimalSeparator := OldSep; //Wiederherstellen des alten Zustandes
end;

SaFu 10. Jun 2008 15:56

Re: Cellen im Stringgrid zusammenrechnen
 
Hey Meister DaddyH das funktioniert.

Also wenn ich als Programmierer in einer Firma angestellt wäre, dann wäre die Firma schon Pleite :-D
Wer soll den darauf kommen auser so Profies wie Ihr noch nichtmal in der Hilfe steht viel darüber

Trotzdem danke

SaFu 10. Jun 2008 16:09

Re: Cellen im Stringgrid zusammenrechnen
 
Noch was

Wie kann es sein das 9 stellen nach dem Komma gerechnet wird bei 400 - 500 werten muss man da noch was beachten??

Und wenn ich nur ein Wert habe wird der auch nict angezeigt und 3 werden auch nicht zusammen gezählt

DeddyH 10. Jun 2008 16:35

Re: Cellen im Stringgrid zusammenrechnen
 
Stepp doch mal durch, so aus der Ferne kann ich da nichts zu sagen.

SaFu 11. Jun 2008 12:26

Re: Cellen im Stringgrid zusammenrechnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
So nochmal zu meinem Problem von gestern

Ich habe mal eine Datei angehängt die, die Werte von einem ganzen monat hat. Wenn ich das mit der funktion zusammen rechne kommt

271539,118000004

Excel gibt mir das Ergebnis raus

271,387,734

was denke ich schon eher hinkommt alleine wegen den nachkommastellen

Wie b ekomme ich jetzt das ergebnis hin

Achso und sind nur so 6 werte in dem StringGrid rechnet das ding garnicht??

DeddyH 11. Jun 2008 13:00

Re: Cellen im Stringgrid zusammenrechnen
 
Ich bekomme das selbe Ergebnis, hab allerdings nicht gegengerechnet. Dann muss man halt mal ermitteln, was denn nun das richtige Ergebnis ist und ggf. noch einmal die Funktion überprüfen.

Klaus01 11. Jun 2008 13:01

Re: Cellen im Stringgrid zusammenrechnen
 
Hallo Sascha,

wenn ich die StringList addiere komme ich auf das gleiche Ergebnis wie Du.
Ich gehen davon aus das es richtig ist.

Du hast in Deiner Liste einige Werte die mit 00.xxx anfangen
diese Werte interpretiert Excel nicht als Zahl.
Daher ist das Excelergebnis nicht richtig.

Grüße
Klaus

SaFu 11. Jun 2008 13:22

Re: Cellen im Stringgrid zusammenrechnen
 
ich hätte vielleicht noch erwähnen sollen das die Werte der liste in ms angegeben sind und wenn ich diese Werte in minuten umrechne bekomme ich ein Ergebnis raus was niemals stimmen kann

4.52565196666673 sekunden :gruebel:

als was sieht excel den 00,xx

SaFu 11. Jun 2008 13:23

Re: Cellen im Stringgrid zusammenrechnen
 
Kann es sein das ich einen anderen Variablen typ nehmen muss

DeddyH 11. Jun 2008 13:24

Re: Cellen im Stringgrid zusammenrechnen
 
Welches Ergebnis erwartest Du denn? Ich komme auf ca. 4 1/2 Minuten.

Klaus01 11. Jun 2008 13:25

Re: Cellen im Stringgrid zusammenrechnen
 
Hallo Sascha,

Excel sieht 00.xx als Text.

Ich rechne so um:
Delphi-Quellcode:
edit1.Text:=format('%.3f',[ergebnis /(1000*60)]);
und bekomme 4.526 Minuten.
Wobei der . der DecimalSeparator ist.

Grüße
Klaus

SaFu 11. Jun 2008 13:27

Re: Cellen im Stringgrid zusammenrechnen
 
Das ergebnis habe ich auch aber ich erwarte eigentlich irgendwas mit 4524,xxx minuten

DeddyH 11. Jun 2008 13:28

Re: Cellen im Stringgrid zusammenrechnen
 
Und wenn das Sekunden sind statt Millisekunden?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:16 Uhr.
Seite 1 von 2  1 2      

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