Entwickler-Ecke

Dateizugriff - anzahl der "spalten" bei *.csv


Morpheus1572 - Mi 03.09.08 22:17
Titel: anzahl der "spalten" bei *.csv
Hi Leutz,

vielleicht gibt es in diesen unzähligen einträgen die lösung, wenn ja habe ich sie nicht gefunden, sorry!!!

Deshalb stelle ich diese frage jetzt u.U. noch mal.

ich lese eine csv-datei in ein StringGrid. die anzahl der benötigten zeilen erfahre ich ja durch StringGrid.RowCount:=meineListe.Count....

damit kann ich also eine exakte Tiefe meines Grids anlegen. Wie erhalte ich aber die benötigten Spalten??? ich muss dafür ja irgendwie dem Wert 'StringGrid.ColCount' etwas zu weisen aber wie?????


Bitte um Hilfe.

Gruß Morph.


Xentar - Mi 03.09.08 22:41

Hm.. was mir spontan einfällt:
- Nimm die erste Zeile aus der CSV Datei
- Pack diese in eine StringList.CommaText
- In StringList.Count hast du nun deine Spaltenzahl


jaenicke - Do 04.09.08 02:08

Die zusätzliche StringList ist gar nicht nötig, so gehts zum Beispiel auch:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
uses
  StrUtils;

...

function GetOccurrenceCount(uText, uSearchText: String): Integer;
var
  CurrentPos: Integer;
begin
  Result := 0;
  CurrentPos := Pos(uSearchText, uText);
  while CurrentPos > 0 do
  begin
    Inc(Result);
    CurrentPos := PosEx(uSearchText, uText, CurrentPos + 1);
  end;
end;

// benutzen
GetOccurrenceCount('Deine,Zeile,mit,Kommata'',')

// EDIT:
Und wenn es nur um ein Zeichen geht geht es auch noch einfacher (schneller und ohne zusätzliche Unit):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function GetOccurrenceCount2(uText: String; uSearch: Char): Integer;
var
  i: Integer;
begin
  Result := 0;
  for i := 1 to Length(uText) do
    if uText[i] = uSearch then
      Inc(Result);
end;


alzaimar - Do 04.09.08 07:20

Nee, jaenicke, so geht das leider nicht: Die CSV-Zeile (Komma=Separator) >a,'x,y,z'< besteht aus zwei Spalten, Du würdest vier daraus machen.
Hier findest Du eine Klasse (TCSVReader), die dir eine CSV-Datei sehr schnell korrekt einließt und dabei die String-Delimiter mit berücksichtigt.
http://www.delphipraxis.net/topic130402_csvreader+schnelles+lesen+von+csvdateien.html&highlight=csv


mkinzler - Do 04.09.08 07:31

Oder man verwendet die Kombination eines CSV-DataSets und einem DBGrid