Autor |
Beitrag |
GigaNeko
      
Beiträge: 51
|
Verfasst: Mo 08.05.06 17:04
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
      
Beiträge: 50
win xp, Win7
D2010
|
Verfasst: 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
      
Beiträge: 33
WIN XP SP2
Delphi 7
|
Verfasst: 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
      
Beiträge: 33
WIN XP SP2
Delphi 7
|
Verfasst: 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 
      
Beiträge: 51
|
Verfasst: 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
      
Beiträge: 33
WIN XP SP2
Delphi 7
|
Verfasst: 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 
      
Beiträge: 51
|
Verfasst: 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
      
Beiträge: 374
WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
|
Verfasst: 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 
      
Beiträge: 51
|
Verfasst: 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
      
Beiträge: 374
WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
|
Verfasst: Mi 17.05.06 13:27
Moin
uups, hatte Deine Frage nicht richtig gelesen bzw. etwas falsch gedeutet
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; |
|
|