Arrays und Objekte in InterRun
-
- Interessent
- Beiträge: 5
- Registriert: Mo, 22 Jan, 2007 7:30
Arrays und Objekte in InterRun
Hallo Dirk,
Gibt es die Möglichkeit, mit Interrun eine interne Liste (array) anzulegen zur dynamischen Weiterverarbeitung? (Beispiel: Aufbau interner array aller Buchungsnummern o.ä.). D.h. wie heißt so eine List Variable (bzw. Objekt wie z. B. Bookings mit n Booking)
Wie erreiche ich eine sortierte Sicht auf beispielsweise die Bookings. (aktuell kann ich nur sagen "for i = 0 to bookings.count", d. h. sortiert nach Index).
Bin für jeden Tip dankbar. Es gibt viele Fragen, aber ich möchte natürlich auch nicht unverschämt Deine Zeit permanent beanspruchen. Vielleicht ibt es ja in baldiger Zukunft eine detailliertere Doku.
mfg
Michael
Gibt es die Möglichkeit, mit Interrun eine interne Liste (array) anzulegen zur dynamischen Weiterverarbeitung? (Beispiel: Aufbau interner array aller Buchungsnummern o.ä.). D.h. wie heißt so eine List Variable (bzw. Objekt wie z. B. Bookings mit n Booking)
Wie erreiche ich eine sortierte Sicht auf beispielsweise die Bookings. (aktuell kann ich nur sagen "for i = 0 to bookings.count", d. h. sortiert nach Index).
Bin für jeden Tip dankbar. Es gibt viele Fragen, aber ich möchte natürlich auch nicht unverschämt Deine Zeit permanent beanspruchen. Vielleicht ibt es ja in baldiger Zukunft eine detailliertere Doku.
mfg
Michael
Hallo Michael,
zur Zwischenspeicherung empfehle ich hier eine Stringliste.
Hier ein Beispiel:
*****************************************
Procedure Schalter1_OnClick
var List : Object |allgemeines Objekt deklarieren
var I : Integer |Laufvariable
|Objekt List als Stringliste initialisieren
List.FillObject("TextFileSource")
|Die Eigenschaften von List anzeigen, später löschen
List.ShowObject
|Buchungsnummern als Text in Stringliste übertragen
for i = 0 to Bookings.Count - 1
List.AddString(IntToStr(Booking(i).Number))
next
|Anzahl Einträge in der Stringliste anzeigen
ShowMessage(IntToStr(List.StringCount))
|Liste alphanumerisch sortieren
List.SortStrings
|Objekt List wieder freigeben
List.Nothing
EndProcedure
*****************************************
Gruß,
Joshua
zur Zwischenspeicherung empfehle ich hier eine Stringliste.
Hier ein Beispiel:
*****************************************
Procedure Schalter1_OnClick
var List : Object |allgemeines Objekt deklarieren
var I : Integer |Laufvariable
|Objekt List als Stringliste initialisieren
List.FillObject("TextFileSource")
|Die Eigenschaften von List anzeigen, später löschen
List.ShowObject
|Buchungsnummern als Text in Stringliste übertragen
for i = 0 to Bookings.Count - 1
List.AddString(IntToStr(Booking(i).Number))
next
|Anzahl Einträge in der Stringliste anzeigen
ShowMessage(IntToStr(List.StringCount))
|Liste alphanumerisch sortieren
List.SortStrings
|Objekt List wieder freigeben
List.Nothing
EndProcedure
*****************************************
Gruß,
Joshua
Hallo Joshua,
gibt es mittlerweile eine anderer Möglichkeit, einen Array aus Objekten zu verwalten?
Wenn nicht und falls ich eine Stringliste verwenden möchte, muss ich ja alle benötigten Felder erst bspw. mit Trennzeichen konkatenieren, dann sortieren und dann wieder trennen, korrekt?
Vielen Dank
Hans
gibt es mittlerweile eine anderer Möglichkeit, einen Array aus Objekten zu verwalten?
Wenn nicht und falls ich eine Stringliste verwenden möchte, muss ich ja alle benötigten Felder erst bspw. mit Trennzeichen konkatenieren, dann sortieren und dann wieder trennen, korrekt?
Vielen Dank
Hans
- Team Schauries
- Site Admin
- Beiträge: 1058
- Registriert: Mo, 17 Jan, 2005 20:25
- Wohnort: Essen
- Team Schauries
- Site Admin
- Beiträge: 1058
- Registriert: Mo, 17 Jan, 2005 20:25
- Wohnort: Essen
Hallo Hans,
hier schon mal eine Betaversion 7.8.
www.eurokass.de/EK230609.exe
In der Hilfe zu InterRun steht unter Variablen/Objekte/FillObject ein Hinweis auf ein neues Objekt MemTable.
Besten Gruß,
Dirk Schauries
hier schon mal eine Betaversion 7.8.
www.eurokass.de/EK230609.exe
In der Hilfe zu InterRun steht unter Variablen/Objekte/FillObject ein Hinweis auf ein neues Objekt MemTable.
Besten Gruß,
Dirk Schauries
Team Schauries
Hallo Dirk,
ich hab einiges herumprobiert mit dem neuen Objekttyp (komme sprachlich eher aus Java/VB/ABAP) und komme auch soweit klar.
Allerdings scheint die Methode SortColumn noch nicht richtig zu funktionieren. Im Beispiel
wird bei beiden Ausgabereihenfolgen 0 und 1 angegeben (statt wie erwartet, beim 2. Mal 1 und 0).
Außerdem wäre eine Methode SortColumns sehr hilfreich, wo erst nach einer Spalte, dann nach einer weiteren sortiert werden könnte etc.
Vielen Dank schon mal und alles Gute
Hans
ich hab einiges herumprobiert mit dem neuen Objekttyp (komme sprachlich eher aus Java/VB/ABAP) und komme auch soweit klar.
Allerdings scheint die Methode SortColumn noch nicht richtig zu funktionieren. Im Beispiel
Code: Alles auswählen
Procedure Test
Var List : Object
List.FillObject("MemTableSource")
List.Cell(0, 0).AsInteger = 0
List.Cell(0, 1).AsInteger = 1
ShowMessage(IntToStr(List.Cell(0,0).AsInteger))
ShowMessage(IntToStr(List.Cell(0,1).AsInteger))
List.SortColumn(0,1)
ShowMessage(IntToStr(List.Cell(0,0).AsInteger))
ShowMessage(IntToStr(List.Cell(0,1).AsInteger))
EndProcedure
Außerdem wäre eine Methode SortColumns sehr hilfreich, wo erst nach einer Spalte, dann nach einer weiteren sortiert werden könnte etc.
Vielen Dank schon mal und alles Gute
Hans
- Team Schauries
- Site Admin
- Beiträge: 1058
- Registriert: Mo, 17 Jan, 2005 20:25
- Wohnort: Essen
Hallo Hans,
vielen Dank für den Hinweis!
Hier auf die Schnelle eine korrigierte EuroKass.exe:
www.eurokass.de/EuroKass.exe
Eine Sortierung über mehrere Spalten ist nicht implementiert und ich kann jetzt noch nicht sagen, ob und wann das umgesetzt wird.
Besten Gruß,
Dirk Schauries
vielen Dank für den Hinweis!
Hier auf die Schnelle eine korrigierte EuroKass.exe:
www.eurokass.de/EuroKass.exe
Eine Sortierung über mehrere Spalten ist nicht implementiert und ich kann jetzt noch nicht sagen, ob und wann das umgesetzt wird.
Besten Gruß,
Dirk Schauries
Team Schauries
- Team Schauries
- Site Admin
- Beiträge: 1058
- Registriert: Mo, 17 Jan, 2005 20:25
- Wohnort: Essen
Hallo Hans,
eine Sortierung über mehrere Spalten ist nun doch implementiert:
SortColumns(MainColumn : Integer; Ascending : Boolean; StartRow, EndRow : Integer; [SubColumn1 : Integer: Ascending1 : Integer; SubColumnx : Integer: Ascendingx : Integer;])
Hinweis: der Parameter SortDirection : Integer wurde in Ascending : Boolean geändert, auch bei der Methode SortColumn()
www.eurokass.de/EuroKass.exe
Beste Grüße,
Dirk Schauries
eine Sortierung über mehrere Spalten ist nun doch implementiert:
SortColumns(MainColumn : Integer; Ascending : Boolean; StartRow, EndRow : Integer; [SubColumn1 : Integer: Ascending1 : Integer; SubColumnx : Integer: Ascendingx : Integer;])
Hinweis: der Parameter SortDirection : Integer wurde in Ascending : Boolean geändert, auch bei der Methode SortColumn()
www.eurokass.de/EuroKass.exe
Beste Grüße,
Dirk Schauries
Team Schauries
Hallo zusammen,
ich nutze die Methode SortColumns() jetzt mehrfach und ich habe gesehen, dass sie auch Einzug in die normalen Listen gefunden hat.
Allerdings habe ich eine Konstellation, wo die Sortierung nicht funktioniert: Ich sortiere erst nach einer Spalte n, danach nach Spalte 0. Dabei wird nur die Spalte n berücksichtigt (andere Kombinationen funktionieren):
Hier ein Teil des Codings, mit dem die Liste aufgebaut wird
Hier die Sortierung:
Es liegt wohl an der SubColumn = 0, ich habe es auch mit anderen Datentypen als Integer in der Spalte 0 versucht.
Viele Grüße
Hans
ich nutze die Methode SortColumns() jetzt mehrfach und ich habe gesehen, dass sie auch Einzug in die normalen Listen gefunden hat.
Allerdings habe ich eine Konstellation, wo die Sortierung nicht funktioniert: Ich sortiere erst nach einer Spalte n, danach nach Spalte 0. Dabei wird nur die Spalte n berücksichtigt (andere Kombinationen funktionieren):
Hier ein Teil des Codings, mit dem die Liste aufgebaut wird
Code: Alles auswählen
Procedure AddPosting (BookingIndex : Integer)
Var RowNo : Integer
RowNo = Postings.RowCount
Postings.Cell(0, RowNo).AsInteger = Booking(BookingIndex).Number
Postings.Cell(1, RowNo).AsFloat = DateToFloat(Booking(BookingIndex).Date)
Postings.Cell(2, RowNo).AsString = Booking(BookingIndex).Description
EndProcedure
Code: Alles auswählen
Postings.SortColumns(1, True, 0, Postings.RowCount - 1, 0, True)
Viele Grüße
Hans
- Team Schauries
- Site Admin
- Beiträge: 1058
- Registriert: Mo, 17 Jan, 2005 20:25
- Wohnort: Essen
Hallo Hans,
merkwürdig, merkwürdig… in meinem Beispiel funktioniert es…
Procedure Schalter2_OnClick
Var Ms : Object
Ms.FillObject("MemTableSource")
Ms.Cell(0,0).AsInteger = 10
Ms.Cell(0,1).AsInteger = 10
Ms.Cell(0,2).AsInteger = 12
Ms.Cell(0,3).AsInteger = 9
Ms.Cell(1,0).AsFloat = 50.0
Ms.Cell(1,1).AsFloat = 51.0
Ms.Cell(1,2).AsFloat = 50.0
Ms.Cell(1,3).AsFloat = 50.0
Ms.Cell(2,0).AsString = "null"
Ms.Cell(2,1).AsString = "eins"
Ms.Cell(2,2).AsString = "zwei"
Ms.Cell(2,3).AsString = "drei"
|Ms.SaveToClipboard("|",False)
Ms.SortColumns(1,True,0,Ms.RowCount - 1,0,True)
Ms.SaveToClipboard("|",False)
EndProcedure
Vor der Sortierung erhalte ich:
10|50|null|
10|51|eins|
12|50|zwei|
9|50|drei|
Nach der Sortierung:
9|50|drei|
10|50|null|
12|50|zwei|
10|51|eins|
Kannst Du meine Zeilen mal ausprobieren?
Viele Grüße,
Dirk
merkwürdig, merkwürdig… in meinem Beispiel funktioniert es…
Procedure Schalter2_OnClick
Var Ms : Object
Ms.FillObject("MemTableSource")
Ms.Cell(0,0).AsInteger = 10
Ms.Cell(0,1).AsInteger = 10
Ms.Cell(0,2).AsInteger = 12
Ms.Cell(0,3).AsInteger = 9
Ms.Cell(1,0).AsFloat = 50.0
Ms.Cell(1,1).AsFloat = 51.0
Ms.Cell(1,2).AsFloat = 50.0
Ms.Cell(1,3).AsFloat = 50.0
Ms.Cell(2,0).AsString = "null"
Ms.Cell(2,1).AsString = "eins"
Ms.Cell(2,2).AsString = "zwei"
Ms.Cell(2,3).AsString = "drei"
|Ms.SaveToClipboard("|",False)
Ms.SortColumns(1,True,0,Ms.RowCount - 1,0,True)
Ms.SaveToClipboard("|",False)
EndProcedure
Vor der Sortierung erhalte ich:
10|50|null|
10|51|eins|
12|50|zwei|
9|50|drei|
Nach der Sortierung:
9|50|drei|
10|50|null|
12|50|zwei|
10|51|eins|
Kannst Du meine Zeilen mal ausprobieren?
Viele Grüße,
Dirk
Team Schauries