Arrays und Ihre Verwendungsmöglichkeiten?!? [ERLEDIGT]

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Arrays und Ihre Verwendungsmöglichkeiten?!?

Beitrag von brandelh »

messing hat geschrieben: ob wir von deinem Schlüsselwort Prog. profitieren können. :D
Ich meinte damit eine Liste der Funktionen und Proceduren um sie in den Textedior für Syntaxhighlighting zu nutzen.
Ich glaube aber nicht, dass dies über die "verrückte Idee" raus kommt, ich habe einfach zu viel um die Ohren ;-)

Erweiterungen zum MED (meinem Editor) wurden hier aber schon verbreitet :D
Gruß
Hubert
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Arrays und Ihre Verwendungsmöglichkeiten?!?

Beitrag von messing »

Servuß,

wenn ich in

Code: Alles auswählen

aArray[15]:= oHBPrinter:SetFont(FONT10)  
hab,
wie bekomme ich diese Anweisung aus dem Array raus, und das Prog. arbeitet die Anweisung ab? :banghead:

Danke
Gruß
Bruno
Messing
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Arrays und Ihre Verwendungsmöglichkeiten?!?

Beitrag von Tom »

Code: Alles auswählen

aArray[15]:= {||oHBPrinter:SetFont(FONT10)}

Eval(aArray[15])
Herzlich,
Tom
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Arrays und Ihre Verwendungsmöglichkeiten?!?

Beitrag von messing »

Tom hat geschrieben:

Code: Alles auswählen

aArray[15]:= {||oHBPrinter:SetFont(FONT10)}

Eval(aArray[15])
Servuß,

kann man auf diese Art beliebige Anweisungen zur Aktion bringen?

Ich frage deshalb: Mein Gedanke, Befehle, Funktionen,etc. in ein Array speichern und bei Bedarf abrufen und abarbeiten lassen.
Wenn ich ein Array mit Diversen Informationen fütter, auch diesen Anweisungen, dann Ausdruck des Arraywerte und verarbeitung der Anweisungen.
So das ich im Array alle Infos ablege wie Daten, Schriftart und Größe.

:blob8:
Gruß
Bruno
Messing
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Arrays und Ihre Verwendungsmöglichkeiten?!?

Beitrag von Tom »

Hallo, Messing.
kann man auf diese Art beliebige Anweisungen zur Aktion bringen?
Im Prinzip ja. Es gibt ein paar Dinge zu beachten, aber eigentlich kann man (fast) beliebigen Code in Codeblöcke stopfen und irgendwo abspeichern. Wichtig ist nur, dass der später sie dann ausführende Code alles nötige "kennt", um die Codeblöcke ausführen ("evaluieren") zu können, zum Beispiel die darin verwendeten Variablen. Und sie müssen auch auf dem richtigen Status stehen. Ein Objekt, das zwar angelegt (:New()), aber noch nicht erzeugt (:Create()) ist, kann z.B. noch nicht manipuliert werden. Darauf muss man achten.

Diese Technik wird benutzt, um sehr flexible "data driven"-Anwendungen zu schreiben. Simples Beispiel: Ich lege alle möglichen Pushbuttons, die es in einem Dialog geben kann, als Skizze z.B. in ein Array. Darin sind dann auch die Active-Codeblöcke enthalten, aber auch die Größen, Captions usw. Der Benutzer kann auswählen, welche Buttons er benötigt und wo die platziert sein sollen. Wenn der Dialog dann neu erstellt und/oder gezeichnet wird, werden die benötigten Buttons als echte Objekte erzeugt und ihren Slots werden die entsprechenden Codeblöcke zugewiesen. Wenn man das auch noch extern bearbeitbar macht (also quasi eine "Datenbank" mit solchen Elementen baut), kann die Anwendung nahezu komplett von außen konfiguriert werden, ohne den Code zu ändern.

Edit: Codeblöcke lassen sich auch (z.B. als Text) in Tabellen speichern. In Zusammenarbeit mit dem Makroexpander (&) kann man auch auf diesem Weg beliebigen Code ausführen lassen, der dann in einer Datenbank steht.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Arrays und Ihre Verwendungsmöglichkeiten?!?

Beitrag von AUGE_OHR »

messing hat geschrieben:So das ich im Array alle Infos ablege wie Daten, Schriftart und Größe.
wie es Tom schon ausführte sind Array sehr nützlich, aber das "ansprechen" per [x][y] ist schlecht "lesbar".
Ich verwende deshalb

Code: Alles auswählen

#xtranslate Druck_Fett  => aArray\[ nDim, 1 ]
um darauf zuzugreifen.
auch ein

Code: Alles auswählen

#xtranslate Druck_Fett  => EVAL( aArray\[ nDim, 1 ] )
müsste funktionieren wenn du Code "ausführen" lassen willst.

p.s. nDim steht hierbei für die Sprache chinesisch/deutsch/englisch
gruss by OHR
Jimmy
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Arrays und Ihre Verwendungsmöglichkeiten?!?

Beitrag von Rolf Ramacher »

Hi Messing,

ich bin auch ein Array-Fan und packe sehr viel in Arrays rein. z.B. ich habe eine Maske, in der viele Sle vorhanden sind und die Informationen aus verschiedenen Datenbanken kommen. Die packe ich alle in ein array mit name der Dbf, feldname, inhalt, art des Feldes, recno -- usw. Und wenn in der Maske auf speichern geklickt wird. wird das Array durchlaufen die entsprechende dbf geöffnet geschrieben und wieder geschlossen.

auch benutze ich ein Array bei objecten. Bei der Bestellung z.B. habe 34 eingabefelder für Größen. gemäß einer combobox müssen die Felder geleert - gesperrt/freigegeben werden. diese alle einzeln zu gestalten wäre Wahnsinn. also durchlaufe ich das object-array - und mache disable() bzw. enable().

und das Array mit all seinen gigantischen Infos kannst du in andere Function weiterschieben zur weiteren Bearbeitung - mache ich auch an manchen Punkten.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Arrays und Ihre Verwendungsmöglichkeiten?!?[erledigt]

Beitrag von messing »

Servuß,

habe vor in einem Array alles reinzupacken und dann auszudrucken.
Bekomme ich irgendwie in

Code: Alles auswählen

aEval(aArray,{|cZeile| oHBPrinter:say(nZeile++,nSpalte,cZeile,cAusr)})
eine Abfrage rein, ob dies ein Ausdruck bzw. Befehl ist?
So das beim Arraydurchlauf der oHBP Befehl als solches erkannt und ausgeführt wird und nicht gedruckt.

Code: Alles auswählen

if left(cZeile,4)="oHBP"
Eval(druckarray[x])
endif
???


Wäre dies so richtig ???

Code: Alles auswählen

aEval(aArray,{|cZeile| IIf(left(cZeile,4)="OHBP",Eval(aArray[cZeile],;
      oHBPrinter:say(nZeile++,nSpalte,cZeile,cAusr)})
???


Habe folgende Zeile

Code: Alles auswählen

aEval(aArray,{|cZeile| IIf( Valtype(aArray[cZeile])="B",Eval(aArray[cZeile]),;
               oHBPrinter:say(nZeile++,nSpalte,cZeile,cAusr) )})
wenn ich die Iff... Abfrage einzeln mache

Code: Alles auswählen

IIf( Valtype(aArray[1])="B",Eval(aArray[1]),;
       oHBPrinter:say(nZeile++,nSpalte,cZeile,cAusr) )
und dann das Array drucken lasse wird zwar die Schriftart geändert, doch beim Druck wird der Codeblock mitgedruckt.

Wenn ich die ich obige Zeile laufen lasse bekomme ich folgende Errormeldung

oError:args :
-> VALTYPE: A VALUE: {{||oHBPrinter:SetFont(7)}, "XABAX ", "Vermoegensverwaltung und Transport Limited ", "ICH und DU Mllers Kuh ", "GWINNERSTRASSE 42 ", "XABAX Vermoegensverwaltung und Transport Limited", "60388 FRANKFURT", "Tel. 069 40807775", "FAX 069 40807779", "DRESDNER BANK", "BLZ 12345678", "Kto. 9876543210", "***** Firmendaten *****", "NIPPON EXPRESS EUROPE ", "NIPPON EXPRESS (DEUTSCHLAND) GMBH ", "CARGO CITY SUED GEB. 575 ", "60549 FRANKFURT", 0.023410, "***** Kundendaten *****"}
-> VALTYPE: B VALUE: {||oHBPrinter:SetFont(7)}
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Parameter hat falschen Typ
oError:filename :
oError:genCode : 2
oError:operation : <A of 19>[<{||oHBPrinter:SetFont(7)}>]
oError:osCode : 0
oError:severity : 2
oError:subCode : 1025
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0

Wo hab ich den Fehler? :?:
[erledigt]
Zuletzt geändert von messing am Di, 04. Mai 2010 15:38, insgesamt 6-mal geändert.
Gruß
Bruno
Messing
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Arrays und Ihre Verwendungsmöglichkeiten?!?

Beitrag von messing »

An alle,

vielen Dank für Eure Unterstützung, habe seit der Registrierung im Januar 2010 sehr viel dazugelernt!

Ich bin zwar kein Neuling, habe aber seit Jahren nicht aktiv programmiert. Habe jetzt im Januar wieder angefangen.

Da ich vorher nicht mit Arrays und Codeblöcken gearbeitet habe, war dies für mich völlig unbekannt.

Daher nochmals vielen Dank, und weiter so.

Symbolisch gesehn steht für Euch alle ein :coffee: bereit!

:D :D :D
Gruß
Bruno
Messing
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Arrays und Ihre Verwendungsmöglichkeiten?!?

Beitrag von messing »

Servus,

möchte ein Array mit Werten aus einer DBF füllen.

Ich bekomme immer nur den aktuellen Satz ins Array

Kann mir einer helfen eine DBF mit etwa 30 Satzen und etwa 10 Feldern in ein Array einzulesen.

Muß ich eine for next Schleife nehmen, oder läßt sich das mit DbEval und AEval reallisieren?

Danke
Gruß
Bruno
Messing
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14657
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Arrays und Ihre Verwendungsmöglichkeiten?!?

Beitrag von Jan »

AEval kannst Du dafür nicht gebrauchen. Denn das brauchst Du, um ein Array zu verarbeiten. Aber Du willst das ja erst erstellen. Nimm DbEval() dafür. Du kannst das auch mit For...Next oder Do While machen, das ist übersichtlicher, aber nach Messungen von Hubert etwas langsamer. Wobei das bei 30 Datensätzen eher egal sein dürfte.

Also etwa so:

Code: Alles auswählen

aArray := {}
Do While .NOT. dbf->(EoF())
   AAdd(aArray, {dbf->feld1, dbf->feld2, ...})
   dbf->(DbSkip())
EndDo
Ungetestet.

Achso: Fang bitte bei einem neuen Thema lieber einen neuen Thread an. Sonst wird der hier inzwischen doch sehr unübersichtlich. Es geht Dir zwar immer wieder um Arrays, aber in jeweils den verschiedenen Bereichen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Arrays und Ihre Verwendungsmöglichkeiten?!?

Beitrag von messing »

Jan hat geschrieben:AEval kannst Du dafür nicht gebrauchen. Denn das brauchst Du, um ein Array zu verarbeiten. Aber Du willst das ja erst erstellen. Nimm DbEval() dafür. Du kannst das auch mit For...Next oder Do While machen, das ist übersichtlicher, aber nach Messungen von Hubert etwas langsamer. Wobei das bei 30 Datensätzen eher egal sein dürfte.

Also etwa so:

Code: Alles auswählen

aArray := {}
Do While .NOT. dbf->(EoF())
   AAdd(aArray, {dbf->feld1, dbf->feld2, ...})
   dbf->(DbSkip())
EndDo
Ungetestet.

Achso: Fang bitte bei einem neuen Thema lieber einen neuen Thread an. Sonst wird der hier inzwischen doch sehr unübersichtlich. Es geht Dir zwar immer wieder um Arrays, aber in jeweils den verschiedenen Bereichen.

Jan
Servus,
dachte man könnte die

Code: Alles auswählen

   FUNCTION RecordData() 
      LOCAL n, aData := Array( FCount() ) 
 
      FOR n:=1 TO FCount() 
         aData[ n ] := FieldGet(n) 
      NEXT 

   RETURN aData 
anpassen.
Danke erstmal, hab ja jetzt 4 Tage Zeit mir den Kopf zu zerbrechen.
Gruß
Bruno
Messing
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14657
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Arrays und Ihre Verwendungsmöglichkeiten?!?

Beitrag von Jan »

Klar, ich hab das jetzt mit einer festen Feldzahl geschrieben. Ich hatte vorausgesetzt, daß Du weißt, welche Feldnamen Du brauchst. Wenn das so nicht stimmt, dann mußt Du natürlich die Feldnamen erst auslesen und diese dann je Array-Satz eintragen.

Wir bösen Protestanten hier im Norden haben leider nicht den Rest der Woche frei :cry: Bei uns ist morgen Westphalentag (oder, wie man Böswillige sagen: Nordrhein-Wandalen-Tag). Da fallen wieder Horden bei uns ein, die Geschäftswelt freut sich schon mal wieder.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Arrays und Ihre Verwendungsmöglichkeiten?!?

Beitrag von Tom »

dachte man könnte die

FUNCTION RecordData()
LOCAL n, aData := Array( FCount() )

FOR n:=1 TO FCount()
aData[ n ] := FieldGet(n)
NEXT

RETURN aData

anpassen.
Kann man auch:

Code: Alles auswählen

aAllData := {}
Do While !Eof()
  aAdd(aAllData,RecordData())
  DbSKip()
ENDDO
Herzlich,
Tom
Antworten