Entwickler-Ecke

Dateizugriff - *CSV Datei in StringGrid


LDMatrix17 - Sa 09.09.06 19:17
Titel: *CSV Datei in StringGrid
hiii @ all friends!
erst mal gruß an alle!!!

Also ich wollte eine .CSV Datei in StringGrid laden, da ich ganz neugering bin weiß nicht wo ich anfangen soll. Zeilen und Spalten müssen Automatisch erzeigt werden.

soO weit weiß ich :
In eine CSV Dateien sind die zeilen per Semikolon getrennt,
man braucht eine Stringlist um die Datei zu laden und
dann braucht man eine For do Schleife um die stringlist durch zu gehen und die werte in StringGrid ein zu tragen...

ich kann mir noch vorstellen wie das alles weiter geht aber weiß nicht wo ich anfangen soll. Ít would be very gratefull, wenn mir jemand schritt für schritt erklären kann.

gruß
Christian


r2c2 - Sa 09.09.06 20:36

Hallo Christian :wave:

guck dir mal folgendes an:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  // Pseudocode:
  cslSL := nil;
  LineSL := nil;
  try
    csvsl := TStringList.Create;
    LineSL: TSringList.Create;
    sl.LoadFromFile(...);
    sl.Delimiter := ';';
    for i := 0 to anzZeilen do
    begin
      LineSL.DelimitedText := sl[i];
      StringGrid.Cells[..., ...] := ...;
    end;
  finally
    csvSL.Free;
    LineSL.Free;
  end;


mfg

Christian


LDMatrix17 - So 10.09.06 16:47

hey bitte!!!
Ich blicks gar nichts hier!!

kannst du vielleicht noch nähr erklären, bitte.

mgf
Christian

Edit:

Meine CSV Datei sieht soO aus.

Name;Vorname;Strasse und Nr;
Test;Test1;Test1 12;
test T;test M;test,12;

Nun will Ich alle Namen, sowie alle Vornamen und adressen in eine Zeile StringGrids ausgeben..
ich bekomme irgendwie nicht hin.

Bitte hilf mir :^^


r2c2 - So 10.09.06 21:23

Ich hab dir doch schon n fast lauffähigen Code gegeben. Was verstehst du denn nicht?

mfg

Christian


Delete - So 10.09.06 21:28

dann nimm doch dies hier:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.Button1Click(Sender: TObject);
var
 sl: tStringList;
 i,j: integer;
 s: string;
begin
 sl := tStringlist.Create;
 try
  sl.LoadFromFile('c:\temp\test.txt');
  for i := 0 to sl.count - 1 do
  begin
   s := sl.Strings[i];
   sg.Cells[1,i+1] := copy(s,1,pos(';',s)-1);
   delete(s,1,pos(';',s));
   sg.cells[2,i+1] := copy(s,1,pos(';',s)-1);
   delete(s,1,pos(';',s));
   sg.cells[3,i+1] := copy(s,1,pos(';',s)-1);
  end;
 finally
  sl.Free;
 end;
end;


Anmerkung: SG = StringGrid


r2c2 - So 10.09.06 21:33

Mein Code funktioniert aber auch, wenns mehr als 3 Spalten sind...

Was aber nix dran ändert, dass man sich mit Code beschäftigen sollte, bevor man behauptet "Ich blicks gar nichts hier!!"...

mfg

Christian


Delete - So 10.09.06 23:32

@r2c2: ist doch egal, ist sein problem. seine HP funktioniert ja auch nicht... :wink:


LDMatrix17 - Mo 11.09.06 18:25

user profile iconr2c2 hat folgendes geschrieben:
Mein Code funktioniert aber auch, wenns mehr als 3 Spalten sind...

Was aber nix dran ändert, dass man sich mit Code beschäftigen sollte, bevor man behauptet "Ich blicks gar nichts hier!!"...

mfg

Christian


hey also, du kennst dich ja viel mehr aus als ich und du kriegst schnell hin.
guck dir deine Code noch mal genau an bitte, da sind noch fehler drinn und nicht vollständig. Wie soll bitte einer, der gerade Delphi lernet damit was anfangen?

Ich habe nicht gegen dich, du hast schnell geholfen aber ehrlich gesagt hab echt nicht kapiert..
trotzdem Danke

MFG
Christian

Edit: hab jetzt kapiert ;)


r2c2 - Mo 11.09.06 18:37

user profile iconLDMatrix17 hat folgendes geschrieben:

guck dir deine Code noch mal genau an bitte, da sind noch fehler drinn und nicht vollständig.

Das is mir schon klar. Ich hab ja auch extra "Pseudocode" dazugeschrieben...

Zitat:

Wie soll bitte einer, der gerade Delphi lernet damit was anfangen?

Indem er sich damit beschäftigt und, wenn etwas unklar ist, eine *konkrete* Frage stellt. "ich blicks net" heißt für mich "ich hab mich nicht damit beschäftigt, mach du für mich die Arbeit". Wenn die Frage aber heißt "Was machst du in Zeile 11? Hab das net verstanden", dann erklär ich das gerne(und ich schätz mal ich bin nicht der einzige der das so handhabt). Ich helfe gerne, ich schreibe aber nicht anderer Leute Programme...

Zitat:

Edit: hab jetzt kapiert ;)

Und... war doch gar nicht so schwer... Wenn nochwas unklar is: Einfach fragen...

mfg

Christian


Nagetier - Fr 20.04.07 15:16

user profile iconr2c2 hat folgendes geschrieben:
Hallo Christian :wave:

guck dir mal folgendes an:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  // Pseudocode:
  cslSL := nil;
  LineSL := nil;
  try
    csvsl := TStringList.Create;
    LineSL: TSringList.Create;
    sl.LoadFromFile(...);
    sl.Delimiter := ';';
    for i := 0 to anzZeilen do
    begin
      LineSL.DelimitedText := sl[i];
      StringGrid.Cells[..., ...] := ...;
    end;
  finally
    csvSL.Free;
    LineSL.Free;
  end;


mfg

Christian


Ich hätte dazu mal n paar kleinere Fragen, da ich mich nur wenig mit dieser Materie auskenne...
1. Was bedeutet das "nil" am Anfang, bzw welche Funktion besitzt dieses?

Und wie ist dieser Abschnitt

LineSL.DelimitedText := sl[i];
StringGrid.Cells[..., ...] := ...;

zu verstehen?
muss ich bei StringGrid.Cells sämtliche Zellen eintragen, oder wie muss ich soetwas behandeln?
Danke schonmal für die Hilfe, wie gesagt kenne mich mit improtieren nur wenig aus ;)


Silas - Fr 20.04.07 15:27

Hallo,

nil ist ein Wert, den man einem Zeiger zuweisen kann, sodass dieser auf 0 (also sozusagen nirgendwohin) zeigt, also dass kein Ziel festgelegt ist.

Bei Stringgrid.Cells[x, y] := ... musst du jede Zelle einzeln behandeln.

Silas


Nagetier - Fr 20.04.07 15:44

achso, ok danke...

Wenn ich allerdings jede Zelle einzeln betitteln muss wird das bei einem akutellen csv Datenblatt relativ schwer, da es ca 120 Zeilen lang und gut 10 Spalten breit ist, gibt es keine einfachere Möglichkeit dafür?


Silas - Fr 20.04.07 15:51

Naja, so aufwändig ist das nicht:

Delphi-Quelltext
1:
2:
3:
4:
for i := 1 to 120 do begin
  for j := 1 to 10 do
    SG.Cells[i, j] := //hier kommt der Text rein(am besten ein Array)
end;

120 und 10 musst du halt durch deine Zahlen ersetzen.


Nagetier - Fr 20.04.07 16:40

Wie also müsste der Code als ganzes aussehen, damit dieser Funktioniert, ich bekomme immer gesagt, dass es undefinierte Bereiche etc. gibt :-/


r2c2 - Fr 20.04.07 16:52

Zu den Fehlermeldzungen siehe:
http://r2c2.weingut-rehn.de/content4_Delphi-Fehlermeldungen.htm

Und ansonsten solltest du dir mal ein Gundlagen-Tutorial angucken. Siehe hier: http://www.christian-stelzmann.de/index_tutorials_crashkurs.html

BTW: Sollte man nicht eigentlich für ne neue Frage auch n neuen Thread aufmachen..?

mfg

Christian


Nagetier - Fr 20.04.07 16:55

http://www.delphi-forum.de/topic_csv+aus+einer+Resource+in+ein+Stringgrid+laden_72124.html

Da hab ich ja auch ein neues, aber es antwortet keiner dadrauf :-/