Autor Beitrag
GigaNeko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: 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 user profile iconraziel: Topic aus Sonstiges (Delphi) verschoben am Di 09.05.2006 um 16:12
jsfrigo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50

win xp, Win7
D2010
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

WIN XP SP2
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

WIN XP SP2
Delphi 7
BeitragVerfasst: Mi 10.05.06 09:04 
So hier uach mal einen 2 min code:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

WIN XP SP2
Delphi 7
BeitragVerfasst: Sa 13.05.06 11:05 
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 374

WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 374

WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
BeitragVerfasst: 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:
ausblenden 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 := '';
      //--Spalten einzeln durchgehen und Inhalt in String
      for spalte := 1 to StringGrid1.ColCount -1 do
        S := S + StringGrid1[zeile,spalte] + ' ';
      Memo1.Lines.Add(Trim(S)); //Trim-> Leerzeichen am Anfang bzw Ende eleminieren
  end;
  Memo1.Lines.SaveToFile('ausgabe.txt');
end;

andere Möglichkeit:
ausblenden 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;
      //--Stelle des 1. vorkommenden Kommas
      P := Pos(',', S);
      //--String ab dem 1.Komma ins Memo, vorher evtl. Leerzeichen am Anfang bzw Ende eleminieren
      Memo1.Lines.Add(Trim(Copy(S, P+1255)));
  end;
  Memo1.Text:=StringReplace(Memo1.Text, ',''  ', [rfReplaceAll, rfIgnoreCase]);
  Memo1.Lines.SaveToFile('ausgabe.txt');
end;