Entwickler-Ecke
Dateizugriff - stringgrid-inhalt als txt-datei speichern
GigaNeko - Mo 08.05.06 17:04
Titel: stringgrid-inhalt als txt-datei speichern
so ich habe folgendes problem: ich habe ein zweispaltides stringgrid mit 49 zeilen. in die erste spalte kommen jeweils nur 3 buchstaben und in die zweite spalte kommt jeweils eine zahl (integer). ich möchte am besten eine prozedur haben mit der ich einen savedialog öffne und der inhalt des stringrids wie folgt abgespechert wird (als txt-datei):
AAA 123
BBB 45
CCC 678
DDD 9
...
leider habe ich noch nicht soviel mit externen dateien gearbeitet und wäre sehr froh darüben wenn mir jemand eine prozedur programmieren könnte mit der soche dateien direkt geschrieben werden könnten. es is aber sehr wichtig das in der textdatei nur die buchstaben stehen dann ein ' ' und die zahl sonst nichts. hoffentlich könnt ihr mir helfen?
Moderiert von
raziel: Topic aus Sonstiges (Delphi) verschoben am Di 09.05.2006 um 16:12
jsfrigo - Di 09.05.06 14:23
Also eine komplette Prozedur wird Dir hier keiner schreiben.
An welchem Teil Deines Programms hängt es denn?
Gruss
Jörg
PS Zum speichern von Textdateien gibt es hier eine Menge Beiträge
FFKangoroo - Di 09.05.06 18:11
Hab jetzt mal nich so viel zeit was zu schreiben. aber du kannst den text eines stringgrids afak als kommatext umwandeln. diesen kannste dann ganz einfach in einen string schreiben. dort die kommas per stringreplace durch leerzeichen ersetzen und per savetofile als txt abspeichern. hoffe es hat geholfen
FFKangoroo - Mi 10.05.06 09:04
So hier uach mal einen 2 min code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin for i:=1 to stringgrid1.RowCount do memo1.Lines.Add(stringgrid1.rows[i].commatext); memo1.text:=StringReplace(memo1.text, ',', ' ', [rfReplaceAll, rfIgnoreCase]); memo1.lines.SaveToFile('ausgabe.txt'); end; |
PS diess Stringgrid hat noch eine fix row. daher fängt es bei 1 an zu zählen ohne fixrow musst du bei null anfangen.
Hoffe konnte helfen
FFKangoroo
GigaNeko - Sa 13.05.06 00:51
@FFKangoroo danke, ich habe aber noch eine frage. wie mache ich es, dass er bei deiner prozedur das erste row (in dem ich die rows durchnummeriere) nicht mit in das memofeld schreibt?
FFKangoroo - Sa 13.05.06 11:05
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin for i:=2 to stringgrid1.RowCount do memo1.Lines.Add(stringgrid1.rows[i].commatext); memo1.text:=StringReplace(memo1.text, ',', ' ', [rfReplaceAll, rfIgnoreCase]); memo1.lines.SaveToFile('ausgabe.txt'); end; |
;)
erste zeile=0 // wahrscheinlich eine Fixrow
zweite zeile=1 // weiss nicht warum er die Auslassen soll kannst ja in die Fixrow auch die überschrift reinschreiben
dritte zeile=2 // deine gewünschte zeile
klappt es?
FFKangoroo
GigaNeko - So 14.05.06 11:45
ahh sorry ich hatte mich vertahn. ich meinte eigentlich, wie schaffe ich es , dass die prozedur die linke spalte des stringrids nicht mitliest? weil ich dort die zeilen nummeriert habe.
raiguen - So 14.05.06 16:08
Moin :-)
Ganz einfach wie bei den Zeilen: Spaltennummerierung fängt auch hier bei 0 an, das ist meistens die FixedColumn (=feste Spalte). Also fängt Deine Schleife nicht bei 0 an sondern bei 1: for Spalte := 1 to Spaltenanzahl do ... ;-)
GigaNeko - So 14.05.06 16:55
ich will aber in die prozedur von FFKangoroo einbauen, dass die erste spalte nicht in das memofeld übertragen wird.
raiguen - Mi 17.05.06 13:27
Moin :-)
uups, hatte Deine Frage nicht richtig gelesen bzw. etwas falsch gedeutet :oops:
So müsste es machbar sein:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); var zeile, spalte:Integer; S: String; begin for zeile := StringGrid1.FixedRows to Stringgrid1.RowCount -1 do begin S := ''; for spalte := 1 to StringGrid1.ColCount -1 do S := S + StringGrid1[zeile,spalte] + ' '; Memo1.Lines.Add(Trim(S)); end; Memo1.Lines.SaveToFile('ausgabe.txt'); end; |
andere Möglichkeit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); var zeile, P :Integer; S: String; begin for zeile := StringGrid1.FixedRows to Stringgrid1.RowCount -1 S := StringGrid1.Rows[zeile].CommaText; P := Pos(',', S); Memo1.Lines.Add(Trim(Copy(S, P+1, 255))); end; Memo1.Text:=StringReplace(Memo1.Text, ',', ' ', [rfReplaceAll, rfIgnoreCase]); Memo1.Lines.SaveToFile('ausgabe.txt'); end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!