Autor Beitrag
NoEon
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 138

win9x, win 2000, win xp, linux 8.0

BeitragVerfasst: Mo 30.08.04 15:32 
Hallo Ng's

ich bin am "schreiben"
ich habe hier im Forum einen tollen beitrag gefunden der mich ein ganzes Stueck weiter gebracht hat.

Jetzt ist es so, das ich meine Tabelle im System drinne habe. ich habe eine Paradox Tabelle als Grundlage.
diese Tabelle hat auch ganz klar Spalten Überschriften.
Diese Spaltenüberschrieften müssen nun auch in meine CSV Datei, in den Header geschrieben werden.

ich hab im Moment sowas von den Kopf verloren. so das ich mal den gesamten Code Poste
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
procedure TForm1.Button2Click(Sender: TObject);
var
  f            : Textfile;
  Ziel         : String;
  Datensatz    : String;
  NexteZeile   : Boolean;
 // speichern    : String;
begin
  if SaveDialog1.Execute then
  begin(SaveDialog1.FileName);

begin

    Ziel := SaveDialog1.FileName;
    Ziel:=Ziel;
    try
      AssignFile(f, Ziel);
      Rewrite(f);
      Reset(f);
    finally
      CloseFile(f);
    end;
    with Query1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select * from para_1');// where');
      //SQL.add('LfdNr='+QuotedStr(Nummer)+' and');
      //SQL.add('Name='+QuotedStr(Name));
      Open;
    end;
    if Query1.RecordCount>0 then
    begin
      Query1.First;
      try
        NexteZeile:=FALSE;
        repeat
          Datensatz:=Query1.FieldByName('Artikel-Nr').asString + ';' +
                     Query1.FieldByName('Warengruppe').asString + ';' +
                     Query1.FieldByName('Beschreibung').asString + ';' +
                     Query1.FieldByName('LPreis').asString + ';' +
                     Query1.FieldByName('LieferantenNummer').asString + ';' +
                     Query1.FieldByName('Hersteller').asString + ';' +
                     Query1.FieldByName('Marke-Typ').asString + ';' +
                     Query1.FieldByName('Geaendert').asString + ';' +
                     Query1.FieldByName('AenderDatum').asString + ';' +
                     Query1.FieldByName('Lagerbuchung').asString + ';' +
                     Query1.FieldByName('Masse').asString + ';' +
                     Query1.FieldByName('GarantieDIT').asString + ';' +
                     Query1.FieldByName('GarantieLF').asString + ';' +
                     Query1.FieldByName('Einheit').asString + ';' +
                     Query1.FieldByName('Serien-Nr').asString + ';' +
                     Query1.FieldByName('Serien-Nr-Regel').asString + ';' +
                     Query1.FieldByName('Referenz-Nr').asString + ';' +
                     Query1.FieldByName('Rabatt').asString + ';' +
                     Query1.FieldByName('Prioritaet').asString;

          if not NexteZeile then
          begin
            AssignFile(f, Ziel);
            Rewrite(f);
            Writeln(f,'Artikel-Nr;'+
                      'Warengruppe;'+
                      'Beschreibung;'+
                      'LPreis;'+
                      'LieferantenNummer;'+
                      'Marke-Typ;'+
                      'Geaendert;'+
                      'AenderDatum;'+
                      'Lagerbuchung;'+
                      'Masse;'+
                      'GarantieDIT;'+
                      'GarantieLF.;'+
                      'Einheit;'+
                      'Serien-Nr;'+
                      'Serien-Nr-Regel;'+
                      'Referenz-Nr;'+
                      'Rabatt;'+
                      'Prioritaet;');
             Reset(f);
            Append(f);
          end;
          NexteZeile:=TRUE;
          Writeln(f, Datensatz);
          Query1.Next;
        until Query1.Eof;
      finally
        CloseFile(f);
      end;
    end;
  end;
  Query1.Close;
end;

{-----------------------------------------------------------------------------
  Procedure : Explode
  Purpose   : Seperates a CSV-line
  Arguments : const Separator, S: string; Limit: Integer = 0
  Result    : TStringDynArray
-----------------------------------------------------------------------------}

 end;
type
TStringDynArray = array of string;
   //Function zum einlesen der CSV Datei
function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray;
var
  SepLen: Integer;
  F, P: PChar;
  ALen, Index: Integer;
begin

  SetLength(Result, 0);     //Check ob Datei leer oder ungültige Zeichen enthält
  if (S = ''or (Limit < 0then Exit;
  if Separator = '' then
  begin
    SetLength(Result, 1);
    Result[0] := S;
    Exit;
  end;
  SepLen := Length(Separator);
  ALen := Limit;
  SetLength(Result, ALen);

  Index := 0;
  P := PChar(S);
  while P^ <> #0 do
  begin
    F := P;
    P := StrPos(P, PChar(Separator));
    if (P = nilor ((Limit > 0and (Index = Limit - 1)) then P := StrEnd(F);
    if Index >= ALen then
    begin
      Inc(ALen, 5); // mehrere auf einmal um schneller arbeiten zu können
      SetLength(Result, ALen);
    end;
    SetString(Result[Index], F, P - F);
    Inc(Index);
    if P^ <> #0 then Inc(P, SepLen);
  end;
  if Index < ALen then SetLength(Result, Index); // wirkliche Länge festlegen
end;



procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
  exparr: TStringDynArray;
  x: integer;
  //CSV: TFileStream;
begin

begin
   OpenDialog1.Execute();
 //  csv:= TFileStream.Create (openDialog1.filename);

Memo1.lines.LoadFromFile(OpenDialog1.filename);

  s := memo1.text;//csv';//'ErstesElement;fooo;blabla;töhö';  // Dieser String wird in das Array geschrieben.
  exparr := explode(';', s); // String in Array speichern.
  for x:=0 to High(exparr) do // alle Elemente durchlaufen
    ShowMessage('String = '+s+#13+#10+'Index = '+inttostr(x)+#13+#10+#13+#10+exparr[x]);  // und eine Messagebox ausgeben

end;

end;
end.


im ersten Abschnitt kann ich die Gesamte Tabelle reinschreiben. aber es muss ja so sein, das nach der Header Zeile einmal ein Carrige Retun Line Feed kommt.
ebenso nach jeder geschrieben Zeile.

wie und wo muss ich da mal ansetzten?!

Also Problem,
CR LF nach jeder geschrieben Zeile, wie bekomm ich das hin?
-->sehe gerde, das ghet auch wunder bar!!! OK
wenn jetzt in meiner Paradox Tabelle x Datensaätze drinne sind, ich aber zuerste nur den Haeder für die CSV geschrieben habe möchte und das mir das Programm die ganzen Tabelle in die CSV Datei schreibt, wie wäre da mal mein Ansatz!
Wo ich schon mal dabei bin
diese Spalten aus der Paradox Tabelle (also die überschriften) kann ich mir die auch senkrecht in einem String Grind anzeigen lassen??
in diesem String Grind soll später eine gegenüberstellung zu einer anderen Tabell erfolgen!




warum ist der weg nach rom so lang?!

gruss
lars

Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt.
zorxx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21

Win XP, GNU/ Linux
D7 Ent
BeitragVerfasst: Mo 30.08.04 18:35 
Hallo erstmal,

das CR LF kannst du eingentlich mit

ausblenden Quelltext
1:
  MyString := 'Das ist eine Zeile' + #13#10;					


an deinen String anfügen. (Wundert mich nur, dass Writeln das nicht automatisch macht :?!?: Deswegen ist es ja ein wirte line)

Zitat:
wenn jetzt in meiner Paradox Tabelle x Datensaätze drinne sind, ich aber zuerste nur den Haeder für die CSV geschrieben habe möchte und das mir das Programm die ganzen Tabelle in die CSV Datei schreibt, wie wäre da mal mein Ansatz!


Ich glaube du meinst die funktion Append(f) anstelle von Rewrite oder Reset.

Ich hoffe ich konnte dir ein bisschen weiterhelfen.

Gruss

zorxx
NoEon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 138

win9x, win 2000, win xp, linux 8.0

BeitragVerfasst: Di 31.08.04 09:12 
Hi,
ja danke ich sah gerade das ein CR LF mitgeschrieben wird und ich die Dateien Zeilenweise schreibe, das ist schon ok.

Nun ist da noch das eine Problem.

ich importiere unterschiedliche Listen in Statische Tabellen. (Paradox/flat File)
diese Paradox Tabelle hat von mir definiert Spalten.
LF_ArtNr| Bez1| Bez2|Preis|Menge|Rabatt

nun ist es so, das ich Listen im CSV Format importiere
und ich möchte gerne zuordnen welche Spalte der CSV Liste wo in meine Paradox Tabelle kommt.
D.H. ich muss zuordnen welche Spalte der CSV in welche Spalte der Paradoc Tabelle kommt.

Ich hatte den Ansatz zuerst
die erste Spalte der CSV Datei einzulesen um die Überschriften zu bekommen.
diese wollte ich mir ein ein StringGrid schreiben.
Die Paradox Tabelle hat jetzt auch Überschriften und die sollen schon in dem String Grid drinne stehn.
Ich nöchte das String Grid als zuordnungs Möglichkeit nutzen.
Weiss aber nicht wie!


Wer kann da helfen?


Gruss
Lars
zorxx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21

Win XP, GNU/ Linux
D7 Ent
BeitragVerfasst: Di 31.08.04 18:54 
Vielleicht hilft dir dieses Code-Snippel weiter:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var
  TableMain : TTable;
...

with TableMain do
begin
  if Active then Active := False;
  Tablename := FileName; //Dateiname von der Paradox Tabelle
  Active := True;

  ComboBox1.Clear;
  for iCount:= 0 to FieldCount-1 do
  { Feldname }
    ComboBox1.Items.add(Fields[iCount].FieldName);
end;

...


Gruss

zorxx

Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt.

_________________
Keine Panik!