![]() |
ListBox und array
Ich möchte temporär ein Array in eine Liste einlesen
Zitat:
Was gibt es für Alternativen? gruss |
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 |
AW: ListBox und array
Zitat:
Spalte 1 = MelloGrandPiano Spalte 2 = 18 Spalte 3 = 0 Ohne es nochmal zusätzlich parsen zu müssen. gruss |
AW: ListBox und array
Zitat:
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? |
AW: ListBox und array
Zitat:
Das ergibt sich durch den Delemiter Komma du verstehst ? ;) gruss |
AW: ListBox und array
Wäre da ein Record nicht einfacher zu handhaben? Oder versteh ich mal wieder alles falsch?
|
AW: ListBox und array
Zitat:
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 |
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 |
AW: ListBox und array
Zitat:
der ich über SubItems die geparsten werte direkt übergeben kann. nur der Einfachheits halber. gruss |
AW: ListBox und array
Zitat:
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 |
AW: ListBox und array
Zitat:
Ich glaube ich bin zu blöd mich richtig auszudrücken. Oder mich versteht keiner. gruss |
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 |
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 |
AW: ListBox und array
Zitat:
alfold |
AW: ListBox und array
Zitat:
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 |
AW: ListBox und array
Hallo Emil,
Zitat:
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; |
AW: ListBox und array
Zitat:
Und dann kann ich den Index 1,2,3 direkt ansprechen ? Ohne im nachhinein nochmal zu parsen ? Werde es mal versuchen. Danke! gruss |
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 |
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:
Es ist hier nicht einmal notwendig, echte Properties einzuführen, da die Klasse "intern" verwendet wird und nicht unbedingt diesen Schutz benötigt.
TInstrument = class(TObject)
public Name : string; ProgrammNo: integer; SchlagInstr: Boolean; procedure LoadFromCSV(const line:string); // befüllt die Werte aus einem CSV-String end; 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; |
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 |
AW: ListBox und array
Zitat:
Danke für dein Beispiel. Werde damit mal Arbeiten . gruss |
AW: ListBox und array
Zitat:
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:
verstehst?
SetCTRL(32, ListView1.SelectedItem.SubItems(1), Channel)
SetINST(ListView1.SelectedItem.SubItems(2), Channel) 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 |
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 |
AW: ListBox und array
Zitat:
Daher mache ich es mit einem Dynamischen Array und gut ist. gruss |
AW: ListBox und array
Zitat:
alfold |
AW: ListBox und array
Zitat:
gruss |
AW: ListBox und array
Hallo Emil,
Zitat:
Da ich nicht weiß was bei dir nicht funktioniert hat hilft dir evtl. das hier noch?
Delphi-Quellcode:
Gruss Jürgen
sl.StrictDelimiter := TRUE;
|
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 |
AW: ListBox und array
Zitat:
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 |
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 |
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 |
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 |
AW: ListBox und array
Zitat:
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