![]() |
Re: Text in die letze Zeile vom StringGrid
Ok
Delphi-Quellcode:
So hats gestimmt wenn ich im string einen schreibfehler mache kann es ja nicht gehen und wenn ich dann noch die variable benutze die ich in der Procdure wo anders eingesetzt habe kann es auch nicht gehen
StringGrid.Rows[0].IndexOf('gesuchte Überschrift')
jetzt funzt es aber danke |
Re: Text in die letze Zeile vom StringGrid
hab doch nochmal ne frage warum werden bei manschen dateien nicht die zwei zeilen angehängt, sonder das ergebnis wird in die letzte Zeile geschrieben in denen noch werte stehen??
Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
Var i,x,y : integer; summe1,ErgebnisSwichedDuration : double; begin Label3.Caption:= ''; Label7.Caption:= ''; y:= StringGrid1.Rows[0].IndexOf('SwitchedDuration'); begin for I := 0 to StringGrid1.RowCount - 1 do if StringGrid1.Cells[i,0] = 'Way' then for x := 0 to StringGrid1.ColCount -1 do if StringGrid1.Cells[x,0] = 'SwitchedDuration' then ErgebnisSwichedDuration:= (findStrings(StringGrid1.Cols[i],StringGrid1.Cols[x])); summe1:= (ErgebnisSwichedDuration); StringGrid1.RowCount:= StringGrid1.RowCount +2; StringGrid1.Cells[y,Pred(StringGrid1.RowCount)]:= Format('%.6f',[summe1/(60)])+' min.'; StringGrid1.Cells[0,Pred(StringGrid1.RowCount)]:= 'Gesamt'; end; end; |
Re: Text in die letze Zeile vom StringGrid
Ist das eigentlich richtig, dass Du erst y ermittelst und dann in einer Schleife noch einmal nach SwitchedDuration suchst? Wieso er die Zeilen nicht anfügt, weiß ich im Moment allerdings auch nicht.
|
Re: Text in die letze Zeile vom StringGrid
Stimmt hast recht kann mir eigentlich zwei zeilen sparen vielleicht fällt ja noch jemanden was auf warum manschmal die zwei zeilen nicht angehängt wereden
|
Re: Text in die letze Zeile vom StringGrid
Da sind for's und if's drin. Der Source ist schlecht formatiert. Vielleicht ist es im Original ja besser, aber so hagelt es eben Fehler der einfachsten Sorte. Die Abfrage über strings ist auch nicht gerade das Gelbe vom Ei. Und : schreibe mal normalen Text etwas leserlicher, ist so zu anstrengend zu lesen. :stupid:
|
Re: Text in die letze Zeile vom StringGrid
besser so
wenn du mir jetzt noch den fehler sagen könntest oder verbesserungsvorschläge hast nur her damit.
Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
Var i,y : integer; summe1,ErgebnisSwichedDuration : double; begin ErgebnisSwichedDuration:= 0; Label3.Caption:= ''; Label7.Caption:= ''; y:= StringGrid1.Rows[0].IndexOf('SwitchedDuration'); begin if StringGrid1.Rows[0].IndexOf('SwitchedDuration') = 4 then begin for I := 0 to StringGrid1.RowCount - 1 do if StringGrid1.Cells[i,0] = 'Way' then ErgebnisSwichedDuration:= (findStrings(StringGrid1.Cols[i],StringGrid1.Cols[y])); summe1:= (ErgebnisSwichedDuration); StringGrid1.RowCount:= StringGrid1.RowCount +2; StringGrid1.Cells[y,Pred(StringGrid1.RowCount)]:= Format('%.6f',[summe1/(60)])+' min.(OUT)'; StringGrid1.Cells[0,Pred(StringGrid1.RowCount)]:= 'Gesamt'; end else exit; end end; |
Re: Text in die letze Zeile vom StringGrid
Ich würde in der Gegend von Zeile 19 einen Breakpoint setzen oder eine showmesage mit der Stringgrid-Zeilennummer. Hehe, was seh ich denn da noch ? Wie vermutet ist die Logik wohl falsch. Die for-Schleife läuft über RowCount und das wird in der for- Schleife selber dann erhöht ? :shock:
|
Re: Text in die letze Zeile vom StringGrid
Guten morgen
Da ich immer noch das Problem habe, das manchmal da Ergebnis in die letzte, statt in die letzte +2 geschrieben wird muss ich das Thema doch nochmal aufgreifen. Das mit dem Brakepoint und Showmessage hat mich nicht weiter gebracht bekomme immer das Ergebnis was es eigentlich sein soll vielleicht hat jemand noch ne idee Gruß Sascha |
Re: Text in die letze Zeile vom StringGrid
Moin Sascha,
vielleicht solltest du mal einen ScreenShot von deinem Grid anhängen, damit man besser versteht was du da machen willst. Zu deinem Code:
Delphi-Quellcode:
Freundliche Grüße
procedure TForm1.Button6Click(Sender: TObject);
Var i, iLastRow, iSD, iWay: Integer; summe1, ErgebnisSwichedDuration: Double; begin ErgebnisSwichedDuration := 0; Label3.Caption := ''; Label7.Caption := ''; iSD := StringGrid1.Rows[0].IndexOf('SwitchedDuration'); iWay := StringGrid1.Rows[0].IndexOf('Way'); // warum diese Prüfung? // if StringGrid1.Rows[0].IndexOf('SwitchedDuration') = 4 then // i läuft über die Zeilen inklusive Titelzeile for i := 0 to StringGrid1.RowCount - 1 do // warum suchst du mit dem Zeilenindex eine Spalte ? if StringGrid1.Cells[i, 0] = 'Way' then // was macht FindStrings()? ErgebnisSwichedDuration := findStrings(StringGrid1.Cols[i], StringGrid1.Cols[y]); summe1 := ErgebnisSwichedDuration; StringGrid1.RowCount := StringGrid1.RowCount + 2; iLastRow := Pred(StringGrid1.RowCount); StringGrid1.Cells[y, iLastRow] := Format('%.6f min.(OUT)', [summe1 / 60]); StringGrid1.Cells[0, iLastRow] := 'Gesamt'; end; |
Re: Text in die letze Zeile vom StringGrid
Liste der Anhänge anzeigen (Anzahl: 2)
So ghab mal die screenshoots angehängt
Delphi-Quellcode:
damit nur nur in die schleife gegeangen wird wenn diese überschrift vorhanden ist.
// warum diese Prüfung?
// if StringGrid1.Rows[0].IndexOf('SwitchedDuration') = 4 then Hier nochmal alles mit findStrings
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; procedure TForm1.Button6Click(Sender: TObject); Var i,y : integer; summe1,ErgebnisSwichedDuration : double; begin ErgebnisSwichedDuration:= 0; Label3.Caption:= ''; Label7.Caption:= ''; y:= StringGrid1.Rows[0].IndexOf('SwitchedDuration'); begin if StringGrid1.Rows[0].IndexOf('SwitchedDuration') = 4 then begin for I := 0 to StringGrid1.RowCount - 1 do if StringGrid1.Cells[i,0] = 'Way' then ErgebnisSwichedDuration:= (findStrings(StringGrid1.Cols[i],StringGrid1.Cols[y])); summe1:= (ErgebnisSwichedDuration); StringGrid1.RowCount:= StringGrid1.RowCount +2; StringGrid1.Cells[y,Pred(StringGrid1.RowCount)]:= Format('%.6f',[summe1/(60)])+' min.(OUT)'; StringGrid1.Cells[0,Pred(StringGrid1.RowCount)]:= 'Gesamt'; end else exit; end end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 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