Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ListBox und array (https://www.delphipraxis.net/159098-listbox-und-array.html)

EWeiss 14. Mär 2011 15:31

ListBox und array
 
Ich möchte temporär ein Array in eine Liste einlesen
Zitat:

MelloGrandPiano, 18, 0
TSringList geht ja nicht..
Was gibt es für Alternativen?

gruss

fkerber 14. Mär 2011 15:34

AW: ListBox und array
 
Hi,

du hast ein mehrdimensionales Array und willst das jeweils in eine Zeile packen? Komma-separiert?
Oder habe ich das falsch verstanden?

Warum geht TStringlist nicht?


LG, Frederic

EWeiss 14. Mär 2011 15:38

AW: ListBox und array
 
Zitat:

Zitat von fkerber (Beitrag 1088389)
Hi,

du hast ein mehrdimensionales Array und willst das jeweils in eine Zeile packen? Komma-separiert?
Oder habe ich das falsch verstanden?

Warum geht TStringlist nicht?


LG, Frederic

Jo ich will quasi so etwas wie Beim Listview verwenden so das ich direkt auf die Spalten zugreifen kann (Aber keine Komponente auf die Form) und nonvcl wenn möglich.
Spalte 1 = MelloGrandPiano
Spalte 2 = 18
Spalte 3 = 0

Ohne es nochmal zusätzlich parsen zu müssen.

gruss

p80286 14. Mär 2011 15:44

AW: ListBox und array
 
Zitat:

Zitat von EWeiss (Beitrag 1088388)
Ich möchte temporär ein Array in eine Liste einlesen
Zitat:

MelloGrandPiano, 18, 0
TSringList geht ja nicht..
Was gibt es für Alternativen?

gruss

Wo ist da ein array?
Warum nicht eine Array-Dimension durch eine Liste ersetzen?
Worum geht's Dir?
Ist da irgendwas mit MIDI?

Gruß
K-H

Edith: Kein roter Kasten?

EWeiss 14. Mär 2011 15:46

AW: ListBox und array
 
Zitat:

Wo ist da ein array?
Siehst das nicht? :roll:
Das ergibt sich durch den Delemiter Komma du verstehst ? ;)

gruss

DeddyH 14. Mär 2011 15:47

AW: ListBox und array
 
Wäre da ein Record nicht einfacher zu handhaben? Oder versteh ich mal wieder alles falsch?

EWeiss 14. Mär 2011 15:53

AW: ListBox und array
 
Zitat:

Zitat von DeddyH (Beitrag 1088396)
Wäre da ein Record nicht einfacher zu handhaben? Oder versteh ich mal wieder alles falsch?

Ich kann ja die Textdatei komplett einlesen und anschließend über den Delemiter Komma parsen
Ich möchte es mir aber einfach machen und das parsen direkt beim einlesen der Textdatei erledigen.

Deshalb war meine Frage ob es eine Liste gibt in der ich bsp.. über subitems [0] [1] die werte direkt übergeben kann.

List.add(Name)
List.subitem(0).add 18
List.subitem(1).add 0

gruss

fkerber 14. Mär 2011 15:54

AW: ListBox und array
 
Hi,

also es gibt noch gar kein Array?
Wäre dann nicht ein 2-dim. Array genau das richtige?


LG, Frederic

EWeiss 14. Mär 2011 15:59

AW: ListBox und array
 
Zitat:

Zitat von fkerber (Beitrag 1088399)
Hi,

also es gibt noch gar kein Array?
Wäre dann nicht ein 2-dim. Array genau das richtige?


LG, Frederic

Ja .. Ich kann eins erstellen mir ging es nur um die Frage ob es da eine Liste ähnlich TSringList gibt
der ich über SubItems die geparsten werte direkt übergeben kann.

nur der Einfachheits halber.

gruss

alfold 14. Mär 2011 16:01

AW: ListBox und array
 
Zitat:

Zitat von EWeiss (Beitrag 1088398)
Ich kann ja die Textdatei komplett einlesen und anschließend über den Delemiter Komma parsen
Ich möchte es mir aber einfach machen und das parsen direkt beim einlesen der Textdatei erledigen.

gruss

Und was hindert dich daran das mit einer TStringList zu machen, als den umständlichen Weg eine Datei zu Parsen? Geschweige das Format zu erstellen.

Hiermal ein kleines Beispiel:
G:\Musik\PLAYER1\02 Begin.wav=02 Begin;10;0,00;0,00;0;0;0;0;0;1
G:\Musik\PLAYER1\rauschen.wav=rauschen;10;0,00;0,0 0;0;0;0;0;0;1
G:\Musik\PLAYER1\10 Geier_ S21.wav=10 Geier_ S21;10;0,00;0,00;0;0;0;0;0;1

Ich muss zwar auch 'Parsen' und lese die daten dann in ein Record ein.
vorteil ich bin nach hinten immer frei wenn ich was erweitern will.
aber der Vorteil des Ladens und Speichern ist einfacher!

alfold

EWeiss 14. Mär 2011 16:04

AW: ListBox und array
 
Zitat:

Zitat von alfold (Beitrag 1088401)
Zitat:

Zitat von EWeiss (Beitrag 1088398)
Ich kann ja die Textdatei komplett einlesen und anschließend über den Delemiter Komma parsen
Ich möchte es mir aber einfach machen und das parsen direkt beim einlesen der Textdatei erledigen.

gruss

Und was hindert dich daran das mit einer TStringList zu machen, als den umständlichen Weg eine Datei zu Parsen? Geschweige das Format zu erstellen.

Hiermal ein kleines Beispiel:
G:\Musik\PLAYER1\02 Begin.wav=02 Begin;10;0,00;0,00;0;0;0;0;0;1
G:\Musik\PLAYER1\rauschen.wav=rauschen;10;0,00;0,0 0;0;0;0;0;0;1
G:\Musik\PLAYER1\10 Geier_ S21.wav=10 Geier_ S21;10;0,00;0,00;0;0;0;0;0;1

alfold

sorry das sagt mir nichts.
Ich glaube ich bin zu blöd mich richtig auszudrücken.

Oder mich versteht keiner.

gruss

alfold 14. Mär 2011 16:10

AW: ListBox und array
 
Ein TStringList ist fast Temporär, ob du sie speicherst oder nur zum einlesen deiner DatenListe nimmst und danach verwirfst bleibt dir überlassen!

alfold

juergen 14. Mär 2011 16:10

AW: ListBox und array
 
Hallo,

ich habe es nicht genau im Kopf, aber die TStringList hat von Hause aus schon alles nötige für Delemiter implementiert. Somit brauchst du nichts zu parsen, weil es die TStringList für dich tut. :-D

alfold 14. Mär 2011 16:14

AW: ListBox und array
 
Zitat:

Zitat von juergen (Beitrag 1088405)
... weil es die TStringList für dich tut. :-D

Nicht ganz, bischen muss man noch selber machen :wink:

alfold

EWeiss 14. Mär 2011 16:17

AW: ListBox und array
 
Zitat:

Zitat von juergen (Beitrag 1088405)
Hallo,

ich habe es nicht genau im Kopf, aber die TStringList hat von Hause aus schon alles nötige für Delemiter implementiert. Somit brauchst du nichts zu parsen, weil es die TStringList für dich tut. :-D

Dann wäre das doch ideal nur wie geht das ...
Habe mal ein Bild angehängt ohne die TextDatei geparst zu haben.

Ich lade die Liste so ein.
Delphi-Quellcode:
            if InstrumentList.ListCount(SKAERO_GetMainItem(ID_INSTRUMENTLIST)) = 0 then
            begin
              InstList := TStringList.Create;
              try
                InstList.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Config\Instrument.txt');
                for IntI := 0 to InstList.Count -1 do
                  InstrumentList.ListAdd(SKAERO_GetMainItem(ID_INSTRUMENTLIST),InstList.Strings[IntI]);
              finally
                InstList.Free;
              end;
            end;

Dann sind die einzelnen zeilen aber nicht geparst innerhalb der TStringList
Ich kann Arrays erstellen und parsen kein problem ich möchte es nur einfach halten von der bedienung her.
Und ein Listview macht das für mich in dem ich einfach die Subitems addiere.

Die InstList hat KEINE Subitems darum geht es mir.

gruss

juergen 14. Mär 2011 16:31

AW: ListBox und array
 
Hallo Emil,
Zitat:

Zitat von EWeiss
Dann wäre das doch ideal nur wie geht das

Bin mir nicht sicher ob es genau so richtig ist, aber in etwa so:
Delphi-Quellcode:
var sl : TStringlist;
begin
  sl := TStringlist.Create;
  try
    sl.Delimiter := ';';
    sl.DelimitedText := 'Hallo1;"Test1 Test2 Test3";Hallo2;Hallo3';
    //sl[0] => Hallo1
    //sl[1] => Test1 Test2 Test3
    //sl[2] => Hallo2
    //sl[3] => Hallo3
  finally
    FreeAndNil(sl);
  end;
end;

EWeiss 14. Mär 2011 16:36

AW: ListBox und array
 
Zitat:

Zitat von juergen (Beitrag 1088411)
Hallo Emil,
Zitat:

Zitat von EWeiss
Dann wäre das doch ideal nur wie geht das

Bin mir nicht sicher ob es genau so richtig ist, aber in etwa so:
Delphi-Quellcode:
var sl : TStringlist;
begin
  sl := TStringlist.Create;
  try
    sl.Delimiter := ';';
    sl.DelimitedText := 'Hallo1;"Test1 Test2 Test3";Hallo2;Hallo3';
    //sl[0] => Hallo1
    //sl[1] => Test1 Test2 Test3
    //sl[2] => Hallo2
    //sl[3] => Hallo3
  finally
    FreeAndNil(sl);
  end;
end;

Ja so habe ich mir das gedacht ...
Und dann kann ich den Index 1,2,3 direkt ansprechen ?
Ohne im nachhinein nochmal zu parsen ?

Werde es mal versuchen.

Danke!

gruss

alfold 14. Mär 2011 16:39

AW: ListBox und array
 
Mal ehrlich, alles was nun mal in einem einfachen Format einer TXT Datei ist, muss man halt Parsen wenn man es in einem bestimmten Format haben will!
Du hast aber noch die Möglichkeit mit ini zu arbeiten. Aber auch dort muss man beim einlesen wieder 'parsen' dorthin wo man es will oder wie es aussehen soll!
Egal was Du nun machst, um es in ein richtigen Format zu erhalten musst Du es 'parsen'. Auch wenn Du es schön speicherst das einlesen bleibt immer als 'parsen'.

Selbst ne DB ist beim Speichern/einlesen nichts anderes.

Ne einfach Möglichkeit gibt es nun mal nicht dafür!
siehe mein Beispiel.
alfold

shmia 14. Mär 2011 16:40

AW: ListBox und array
 
Du willst einfach nicht in Objekten bzw. Klassen denken. :(
(Mein letzter Versuch)
Die Klasse TStrings bzw. TStringList bringt schon alles mit, um eine Liste von Namen zusammen mit weiteren Daten (=Objekte) zu verwalten.
Bitte kein Array verwenden.

Es gibt 2 Klassen:
1.) eine ganz einfache Klasse, die die Daten aufnimmt.
Pro Wert gibt es ein Property oder Member-Variable.
Delphi-Quellcode:
TInstrument = class(TObject)
public
  Name : string;
  ProgrammNo: integer;
  SchlagInstr: Boolean;
  procedure LoadFromCSV(const line:string); // befüllt die Werte aus einem CSV-String
end;
Es ist hier nicht einmal notwendig, echte Properties einzuführen, da die Klasse "intern" verwendet wird und nicht unbedingt diesen Schutz benötigt.
2.) eine Ableitung von TStringList
Delphi-Quellcode:
TInstrumentList = class(TStringList)
public
  procedure AddInstrument(instr : TInstrument);
  procedure FreeInstruments;

  procedure LoadInstrumentsFromFile(const filename:string);
end;

procedure TInstrumentList.AddInstrument(instr : TInstrument);
begin
  AddObject(instr.Name, instr);
end;

procedure TInstrumentList.FreeInstruments;
var i : integer;
begin
  for i := Count-1 downto 0 do
  begin
    Objects[i].Free;
    delete(i);
  end;
end;

alfold 14. Mär 2011 16:46

AW: ListBox und array
 
Doch würde er schon, nur den Aufwand dahin würde er gerne überspringen.
So nach ...ne txt datei einlesen sooo viel Aufwand:wink:

alfold

EWeiss 14. Mär 2011 16:48

AW: ListBox und array
 
Zitat:

Du willst einfach nicht in Objekten bzw. Klassen denken.
Muss ich mir angewöhnen.

Danke für dein Beispiel.

Werde damit mal Arbeiten .

gruss

EWeiss 14. Mär 2011 16:53

AW: ListBox und array
 
Zitat:

Zitat von alfold (Beitrag 1088417)
Doch würde er schon, nur den Aufwand dahin würde er gerne überspringen.
So nach ...ne txt datei einlesen sooo viel Aufwand:wink:

alfold

Darum geht es nicht.
Es hat auch nichts mit dem Einlesen der TextDatei zu tun sondern damit
Das in der Liste eingelesenen Array so einfach wie möglich zu bedienen,

Sample!
Hoffe du verstehst jetzt.
Ich klicke in meine ListBox abhängig vom Index (Selektierter eintrag)
Möchte ich 2 Funktionen ausführen.

Delphi-Quellcode:
    SetCTRL(32, ListView1.SelectedItem.SubItems(1), Channel)
    SetINST(ListView1.SelectedItem.SubItems(2), Channel)
verstehst?

Subitem 1 = 18
Subitem 2 = 0

Nicht mehr oder weniger will ich erreichen
Ohne die Datei oder Zeile nochmal parsen zu müssen.

Und so wie es aussieht ist es genau das was Jürgen eingebracht hat.

gruss

alfold 14. Mär 2011 17:09

AW: ListBox und array
 
jo, und da hast Du uns nicht verstanden.
Egal ob in Listview oder Array oder Record. Einmal einlesen und dann mit den indizen arbeiten. Ein nochmaliges einlesen war auch bei uns nicht vorgesehen. :wink:

alfold

EWeiss 14. Mär 2011 17:15

AW: ListBox und array
 
Zitat:

Zitat von alfold (Beitrag 1088425)
jo, und da hast Du uns nicht verstanden.
Egal ob in Listview oder Array oder Record. Einmal einlesen und dann mit den indizen arbeiten. Ein nochmaliges einlesen war auch bei uns nicht vorgesehen. :wink:

alfold

Ok sehe schon es gibt keine Liste welche den Anforderungen die ich stelle genehm wird.
Daher mache ich es mit einem Dynamischen Array und gut ist.

gruss

alfold 14. Mär 2011 17:25

AW: ListBox und array
 
Zitat:

Zitat von EWeiss (Beitrag 1088419)
Und so wie es aussieht ist es genau das was Jürgen eingebracht hat.

Warum verwirfst Du diese Idee! Sie ist simpel und einfach umzusetzen und bietet alles was Du willst! :gruebel:

alfold

EWeiss 14. Mär 2011 17:43

AW: ListBox und array
 
Zitat:

Zitat von alfold (Beitrag 1088432)
Zitat:

Zitat von EWeiss (Beitrag 1088419)
Und so wie es aussieht ist es genau das was Jürgen eingebracht hat.

Warum verwirfst Du diese Idee! Sie ist simpel und einfach umzusetzen und bietet alles was Du willst! :gruebel:

alfold

Weil ich es versucht habe und es nicht das ergebnis liefert was ich mir erhofft habe.

gruss

juergen 14. Mär 2011 18:59

AW: ListBox und array
 
Hallo Emil,
Zitat:

Zitat von EWeiss
...
Weil ich es versucht habe und es nicht das ergebnis liefert was ich mir erhofft habe.
...


Da ich nicht weiß was bei dir nicht funktioniert hat hilft dir evtl. das hier noch?
Delphi-Quellcode:
sl.StrictDelimiter := TRUE;
Gruss Jürgen

EWeiss 14. Mär 2011 18:59

AW: ListBox und array
 
Nur nochmal zur Information!
Das wollte ich mir sparen..

Delphi-Quellcode:
type
  TSplitStrArray = array of string;
Delphi-Quellcode:
function Split(const Source, Delimiter: string): TSplitStrArray;
var
  spCount: integer;
  spPos:   integer;
  spLength: integer;
  sTemp:   string;
  aSplit:  TSplitStrArray;

begin
  sTemp   := Source;
  spCount := 0;
  spLength := Length(Delimiter) - 1;
  repeat
    spPos := Pos(Delimiter, sTemp);
    if spPos = 0 then
      break
    else
    begin
      Inc(spCount);
      SetLength(aSplit, spCount);
      aSplit[spCount - 1] := Copy(sTemp, 1, spPos - 1);
      Delete(sTemp, 1, spPos + spLength);
    end;

  until False;
  if Length(sTemp) > 0 then
  begin
    Inc(spCount);
    SetLength(aSplit, spCount);
    aSplit[spCount - 1] := sTemp;
  end;

  Result := aSplit;

end;
Delphi-Quellcode:
case LoWord(wp) of
ID_INSTRUMENTLIST:
  begin
    nItem := InstrumentList.ListGetCurSel(lP);
    InstrumentList.ListSelectPlus(lP, nItem);
    tmpStr := Split(InstArrayList[nItem],',');

    SetController(32, StrToInt(tmpStr[1]), Channel);
    SetInstrument(StrToInt(tmpStr[2]), Channel);
    SKAERO_UpdateWindow(lP, False);
  end;

Das hätte man einfacher haben können mit einer Simplen List die Subitems versteht.

gruss

EWeiss 14. Mär 2011 19:01

AW: ListBox und array
 
Zitat:

Zitat von juergen (Beitrag 1088456)
Hallo Emil,
Zitat:

Zitat von EWeiss
...
Weil ich es versucht habe und es nicht das ergebnis liefert was ich mir erhofft habe.
...


Da ich nicht weiß was bei dir nicht funktioniert hat hilft dir evtl. das hier noch?
Delphi-Quellcode:
sl.StrictDelimiter := TRUE;
Gruss Jürgen

Schau mal meinen Code..
Das alles wollte ich mir mit einer einfachen Liste sparen die SubItems versteht.
Irgendwie hat mich bis auf dich niemand so recht verstanden.

Das war doch eine ganz einfache Frage ??

gruss

alfold 14. Mär 2011 19:43

AW: ListBox und array
 
Das was du willst haben wir schon verstanden.
Nur ne einfache null Lösung aus einer Textdatei Zeile, ohne Aufwand Subitems zu machen gibt es nicht. Woher soll denn auch ein Array oder TStringlist wissen wie wo welche subitems wo wie stehen. Das sogenannte zuordenen in ein Array oder List must Du natürlich selber machen. Wie gross der Aufwand wird hängt davon ab wie viele Trenner du im String selbst benutzt!
Noch mal mein Beispiel:
G:\Musik\PLAYER1\02 Begin.wav=02 Begin;10;0,00;0,00;0;0;0;0;0;1
Ich habe hier als Value, 9 ';' als trenner. Also muss ich beim auslesen auch 9 mal diesen Trenner finden!
Entweder mit Posex (ist nicht gerade effektiv) oder ich lese Value noch mal in eine TStringlist mit DelimtedText und kann nun auf die indizen Über den index zugreifen. Wobei das letztere natürlich einfacher ist.

alfold

EWeiss 14. Mär 2011 19:50

AW: ListBox und array
 
In VB lese ich eine Textdatei über EOF ein zeile für zeile versteht sich.
Parse sie und weise meinem ListView welches über 3 Tabs verfügt die 3 Variablen zu.

So kann ich direkt über die Subitems die für mich gerade von bedeutung sind zugreifen.
Nun gut habe es jetzt so gemacht das ich halt nochmal parse befor ich die benötigte Value an meinen Controler schicke.
Kein Beinbruch.
Und 500 Intrumente sind schnell eingelesn ;)

Einfacher wäre es trotzdem gewesen wenn es eine solche List mit SUBITEMS gegeben hätte.
Mehr wollte ich nicht und so war meine Fragestellung.

gruss

alfold 14. Mär 2011 20:04

AW: ListBox und array
 
Da gibt es doch
ListView1.Items.Add.SubItems.DelimitedText(meinstr ing);
ListView.items.add.subitems.Lodafromfile(meine Datei);
wenn ich mich recht entsinne :gruebel:

alfold

EWeiss 14. Mär 2011 20:08

AW: ListBox und array
 
Zitat:

Zitat von alfold (Beitrag 1088473)
Da gibt es doch
ListView1.Items.Add.SubItems.DelimitedText(meinstr ing);
ListView.items.add.subitems.Lodafromfile(meine Datei);
wenn ich mich recht entsinne :gruebel:

alfold

Danke hat sich bereits erledigt.
Ich schreibe meinen Code bestimmt nicht mehr um.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz