AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TSTRINGLIST in ein Array kopieren

Ein Thema von gallstone · begonnen am 13. Okt 2011 · letzter Beitrag vom 21. Okt 2011
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#11

AW: TSTRINGLIST in ein Array kopieren

  Alt 13. Okt 2011, 14:05
eher so
Delphi-Quellcode:
dl : tstringlist;
...
dl:=tstringlist.create;
for i:=0 to sl.count-1 do begin
 dl.clear;
 dl.delimitedtext:=sl[i];
 for j:=0 to dl.count do
  array[x,j]:=dl[j];
end;
(ohne gewähr, das nutze ich seltenst bis überhaupt nicht)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: TSTRINGLIST in ein Array kopieren

  Alt 13. Okt 2011, 14:08
Ohne Fehlerbehandlung und ungetestet:
Delphi-Quellcode:
procedure DateiEinlesen(const Dateiname: string);
var
  LineList, FieldList: TStrings;
  i, j: integer;
begin
  //Zeilen
  LineList := TStringlist.Create;
  try
    LineList.LoadFromFile(Dateiname);
    //Felder
    FieldList := TStringlist.Create;
    try
      FieldList.Delimiter := #9;
      FieldList.StrictDelimiter := true;
      for i := 0 to LineList.Count - 1 do
        begin
          //Zeile in Felder zerlegen
          FieldList.DelimitedText := LineList[i];
          //...und durchgehen
          for j := 0 to FieldList.Count - 1 do
            (* etwas mit dem Feld tun *)
        end;
    finally
      FieldList.Free;
    end;
  finally
    LineList.Free;
  end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#13

AW: TSTRINGLIST in ein Array kopieren

  Alt 13. Okt 2011, 14:53
zum Fertigbasteln, ein Rohgerüst:

(ja ich weiß es gibt Objektlisten, ja da könnten noch try finallys rein, ja einen Setter könnte man auch noch .........)
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TCVSClass=Class
    private
    Ffn:String;
    Fsl:TStringList;
    Fll:TList;
    function GetColumns: Integer;
    function GetRows: Integer;
    public
     Constructor Create(const fn:String;aDelimiter:Char);
     Destructor Destroy;
     Function GetElement(x, y: Integer): String;
    published

    Property Columns:Integer read GetColumns;
    Property Rows:Integer read GetRows;
  End;

  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TCVSClass }

constructor TCVSClass.Create(const fn: String;aDelimiter:Char);
var
  i:Integer;
begin

  FFn := fn;
  Fsl := TStringList.Create;
  Fsl.LoadFromFile(fn);
  Fll := TList.Create;
  for I := 0 to Fsl.Count - 1 do
      begin
        Fll.Add(TStringList.Create);
        with TStringList(FLL[FLL.Count-1]) do
          begin
            Delimiter := aDelimiter;
            DelimitedText := Fsl[i];
          end;
      end;
end;

destructor TCVSClass.Destroy;
var
  i:Integer;
begin
  Fsl.Free;
  for I := 0 to Fll.Count - 1 do TStringList(Fll[i]).free;
  Fll.Free;

end;

function TCVSClass.GetColumns: Integer;
begin
  if Fll.Count>0 then
    Result := TStringList(FLL[0]).count
  else Result := 0;
end;

function TCVSClass.GetElement(x, y: Integer): String;
begin
  if (y > -1) and (y < Fll.Count) then
    begin
       if (x > -1) and ( x < TStringList(FLL[y]).Count) then
          begin
            Result := TStringList(FLL[y])[X];
          end else Result := '';
    end
  else Result := '';
end;

function TCVSClass.GetRows: Integer;
begin
  Result := Fll.Count;
end;




procedure TForm1.Button1Click(Sender: TObject);
var
  x,y:Integer;
begin
  With TCVSClass.Create('C:\temp\Mappe1.csv',';') do
    begin
      for x := 0 to Rows do
       for y := 0 to Columns do
        Memo1.Lines.Add(GetElement(x,y));

    end;
end;

end.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
gallstone

Registriert seit: 27. Jul 2005
34 Beiträge
 
#14

AW: TSTRINGLIST in ein Array kopieren

  Alt 14. Okt 2011, 13:01
zum Fertigbasteln, ein Rohgerüst:
hi und danke!

das sind mir aber zu viele dinge ich nicht nachvollziehen kann
  Mit Zitat antworten Zitat
gallstone

Registriert seit: 27. Jul 2005
34 Beiträge
 
#15

AW: TSTRINGLIST in ein Array kopieren

  Alt 14. Okt 2011, 13:05
Ohne Fehlerbehandlung und ungetestet:
Delphi-Quellcode:
procedure DateiEinlesen(const Dateiname: string);
var
  LineList, FieldList: TStrings;
  i, j: integer;
begin
  //Zeilen
  LineList := TStringlist.Create;
  try
    LineList.LoadFromFile(Dateiname);
    //Felder
    FieldList := TStringlist.Create;
    try
      FieldList.Delimiter := #9;
      FieldList.StrictDelimiter := true;
      for i := 0 to LineList.Count - 1 do
        begin
          //Zeile in Felder zerlegen
          FieldList.DelimitedText := LineList[i];
          //...und durchgehen
          for j := 0 to FieldList.Count - 1 do
            (* etwas mit dem Feld tun *)
        end;
    finally
      FieldList.Free;
    end;
  finally
    LineList.Free;
  end;
end;
hi und danke,

deines kann ich schon mehr nachvollziehen.
dennoch erschließt sich mir nicht wie ich dann zum beispiel das feld [5,10] aufrufen soll.

also nach dem alles gemacht wurde.

ansonsten habe ich angefangen mir ein dyn arry zu bauen.
so kann ich das schon mit text füllen und ausgeben.
brauche nur noch nach den tabs zu suchen und alles in die felder eintragen.

es sei denn du kannst mir das idiotensicher aufzeigen - deine lösung würde auf jeden fall den QT verkürzen

grüße!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: TSTRINGLIST in ein Array kopieren

  Alt 14. Okt 2011, 13:19
Immer noch ungetestet, sollte aber hoffentlich funktionieren.
Delphi-Quellcode:
type
  TDeinArray = array of array of string;
  
procedure DateiEinlesen(const Dateiname: string; out ResultArray: TDeinArray);
var
  LineList, FieldList: TStrings;
  i, j: integer;
begin
  //Zeilen
  LineList := TStringlist.Create;
  try
    LineList.LoadFromFile(Dateiname);
    //erste Dimension ist nun bekannt, Länge setzen
    SetLength(ResultArray, LineList.Count);
    //Felder
    FieldList := TStringlist.Create;
    try
      FieldList.Delimiter := #9;
      FieldList.StrictDelimiter := true;
      for i := 0 to LineList.Count - 1 do
        begin
          //Zeile in Felder zerlegen
          FieldList.DelimitedText := LineList[i];
          //Nun ist auch die zweite Dimension bekannt, Länge setzen
          SetLength(ResultArray[i], FieldList.Count);
          //...und befüllen
          for j := 0 to FieldList.Count - 1 do
            ResultArray[i][j] := FieldList[j];
        end;
    finally
      FieldList.Free;
    end;
  finally
    LineList.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  TestArray: TDeinArray;
  i: integer;
begin
  DateiEinlesen('C:\Dideldum\Wuppdi.txt', TestArray);
  for i := Low(TestArray) to High(TestArray) do
    ShowMessage(Format('Zeile %d enthält %d Felder.', [i + 1, Length(TestArray[i])]));
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#17

AW: TSTRINGLIST in ein Array kopieren

  Alt 14. Okt 2011, 15:27
dennoch erschließt sich mir nicht wie ich dann zum beispiel das feld [5,10] aufrufen soll.
darum ist es bisher ja auch nicht gegangen.
Du wolltest den inhalt einer Stringliste (Datei) in ein Array übertragen.
Da sind die Daten jetzt.

Und so kannst Du auf die Inhalte zugreifen: z.B.
Showmessage(myarray[5,10]; Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
gallstone

Registriert seit: 27. Jul 2005
34 Beiträge
 
#18

AW: TSTRINGLIST in ein Array kopieren

  Alt 17. Okt 2011, 14:40
Hi,

also da ich gern verstehe was ich mache, habe ich mir das nun doch selbst gebastelt. Hier seid einfach zu Pro :

Code:
var
  Feld : array of array of string;

procedure DateiEinlesen(Dateiname:string);

var sl: TStringList;
    auswahl:string;
    stelle,i,k:integer;
begin
  sl:=TStringList.Create; //Objekt erzeugen
  try
    sl.LoadFromFile(dateiname); //Datei in Stringliste laden
  finally
  setlength(feld,sl.Count,30);
    i:=0; //Zähler für Zeilen
    k:=0; //Zähler für Spalten
  while i<=sl.Count-1 do     //abarbeiten Zeilen
    begin
      k:=0;
      auswahl:=sl.Strings[i];                   //i-te Zeile in Zwischenstring Auswahl laden
        while k<=29 do                          //abarbeiten Spalten
          begin
            stelle:=pos(#9,auswahl);            //wenn TAB gefunden = neue Spalte (Stelle=TabPosition)
            feld[i,k]:=copy(auswahl,0,stelle-1); //eintragen in das Array
            auswahl:=copy(auswahl,stelle+1,length(auswahl)); //string wird um eingetragenes gekürzt
            k:=k+1;
          end;
      i:=i+1;
    end;
  form1.RichEdit1.Clear;                        
//Wiedergabe Array in RichEdit, zu Testzwecken
  i:=0;
  while i<=sl.Count-1 do
    begin
    k:=0;
      while k<=29 do
        begin
          form1.RichEdit1.Text:=form1.RichEdit1.Text+#9+feld[i,k];
          k:=k+1;
        end;
      form1.RichEdit1.Lines.Add(' ');
      i:=i+1;
    end;
  sl.free; //Objekt wieder freigeben
  end;
end;
Danke euch vielmals für eure Bemühungen, werde sicher wieder gern auf euch zurückkommen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: TSTRINGLIST in ein Array kopieren

  Alt 17. Okt 2011, 14:47
DelimitedText hättest Du aber ganz bequem nachlesen können
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#20

AW: TSTRINGLIST in ein Array kopieren

  Alt 17. Okt 2011, 15:35
Statt SL.Strings[I] kann man einfach SL[I] schreiben und Strings beginnen in Delphi mit 1, also Copy (Auswahl, 1, ..) .
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz