[GastForen Programmierung/Entwicklung AppleScript List of Records

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

List of Records

Anonym
Beiträge gesamt: 22827

28. Mai 2005, 12:03
Beitrag # 1 von 6
Bewertung:
(2000 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebe Gemeinde,

Versuche einen List of Records zu erstellen, und aus diesem wiederum eine Teilenge zu bekommen, auf die eine bestimmtes Kriterium zutrift.

Habe ein Beispiel geschrieben, wie der Code ungefähr aussehen sollte, nur so funktioniert es nicht richtig, vieleicht kann mir einer sagen, was ich machen soll, damit es läuft.

Eine Schleife will ich nicht benutzen, in der ich jedes Element der Liste anpacke, da Die Liste in Wirklichkeit über 10.000 Einträge haben wird, und das den Verlauf sehr stark verlangsammen wird...

Ich hoffe mir kann da einer Helfen.

Danke im Voraus..

MrLight :-)
Hier der Beispielcode...

Zitat set tableData to {{|name|:"Bart Simpson", city:"Springfield", zip:"19542", age:12}, ¬
     {|name|:"Ally McBiel", city:"Chicago", zip:"91544", age:28}, ¬
     {|name|:"Joan of Ark", city:"Paris", zip:"53255", age:36}, ¬
     {|name|:"King Tut", city:"Egypt", zip:"00245", age:45}, ¬
     {|name|:"James Taylor", city:"Atlanta", zip:"21769", age:42}}
set tableNewEntry to {{|name|:"King Nik", city:"Central City", zip:"00100", age:33}}

set tableData to tableData & tableNewEntry --[olive] Hier hänge ich weitere Einträge an ...[/olive]

set sucheEintrag to {} --[olive] deffiniere die Liste[/olive]
set sucheEintrag to (every record of tableData whose "city" is "Springfield") as record --[olive] hier ziehe ich eine Teilmänge heraus[/olive]

--[olive] Das Ergebnis, das ich erreichen will soll wie folgt aussehen:[/olive]
--[olive] sucheEintrag = {     {|name|:"Bart Simpson", city:"Springfield", zip:"19542", age:12}, ¬[/olive]
--[olive]                      {|name|:"King Nik", city:"Springfield", zip:"00100", age:33}}[/olive]



display dialog city of record 1 of tableData --[olive] dieser geht noch[/olive]
display dialog city of record 1 of sucheEintrag --[olive] dieser nicht (Applescript Fehler: Fehler in einer Skripterweiterung.)[/olive]


-------------------------
[This script was automatically tagged for color coded syntax by [url=http://homepage.mac.com/jonn8/as/]Convert Script to Markup Code]
X

List of Records

Hans Haesler
  
Beiträge gesamt: 5826

29. Mai 2005, 23:12
Beitrag # 2 von 6
Beitrag ID: #419679
Bewertung:
(1999 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo MrLight,

herzlich willkommen im dtpro-Forum! :-)

Unter welchem Mac OS bist Du unterwegs?

Gruss, Hans


als Antwort auf: [#419678]

List of Records

Anonym
Beiträge gesamt: 22827

30. Mai 2005, 00:00
Beitrag # 3 von 6
Beitrag ID: #419680
Bewertung:
(1999 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
@ Hans Haesler

Danke für die warme Begrüßung.

MAC OS X 10.3.9.

Zur Zeit behelfe ich mir mit einer Lösung, die so ähnlich aussieht:


Zitat set tableData to {{|name|:"Bart Simpson", city:"Springfield", zip:"19542", age:12}, ¬
     {|name|:"Ally McBiel", city:"Chicago", zip:"91544", age:28}, ¬
     {|name|:"Joan of Ark", city:"Paris", zip:"53255", age:36}, ¬
     {|name|:"King Tut", city:"Egypt", zip:"00245", age:45}, ¬
     {|name|:"James Taylor", city:"Atlanta", zip:"21769", age:42}}
set tableNewEntry to {{|name|:"King Nik", city:"Springfield", zip:"00100", age:33}}

set tableData to tableData & tableNewEntry

set tableDataRef to a reference to tableData --[olive] um die Zugriffe zu beschleunigen[/olive]
--[olive]set testThen to (current date) -- time tester (Sekunden)[/olive]
set sucheEintrag to {}
repeat with myRecordReference in tableDataRef
     if city of myRecordReference is "Springfield" then copy (myRecordReference as record) to the end of sucheEintrag --[olive] Ist schneller als einfaches "set x to x & y"[/olive]
end repeat
--[olive]display dialog ((current date) - testThen) -- time tester  (Sekunden)[/olive]

display dialog city of record 1 of tableData
display dialog city of record 1 of sucheEintrag


Doch das wird wahrscheinlich immer noch zu langsam sein. Ich überlege, ob ich das nicht komplett einer Routine in C überlassen sollte, nur wie ich Daten aus Applescript an C übergebe und auch wieder zurück, dafür sind meine Kenntnisse nicht aussreichend, noch wie ich so ein Datenformat in C abbilde. (Hatte erst vor paar Wochen mit C angefangen....)

Für Nutzliche Tips und Vorschläge bin ich immer zu haben, mit Dank im Voraus, verbleibe ich...

Mr Light :-)

-------------------------
[This script was automatically tagged for color coded syntax by [url=http://homepage.mac.com/jonn8/as/]Convert Script to Markup Code]


als Antwort auf: [#419678]

List of Records

Hans Haesler
  
Beiträge gesamt: 5826

30. Mai 2005, 11:50
Beitrag # 4 von 6
Beitrag ID: #419681
Bewertung:
(1999 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Mr Light,

zunächst ein paar Tips zu Deiner Lösung.

Der Record 'tableNewEntry' sollte mit 'set end' an 'tableData' angefügt werden. Sonst wird zuerst
eine Kopie des ganzen Records 'tableData' erstellt, an welchen dann mit dem "&"-Zeichen die neuen
Einträge angehängt werden. Bei umfangreichen Listen kann das dauern. Aufgepasst: Anstelle der
doppelten Akkoladen nur einfache verwenden.

Zum Stoppen der Zeit reicht 'current date' nur, wenn die Ausführung relativ lange dauert. Zum
Messen kürzerer Abstände kann man zum Beispiel die Scripting Addition "GetMilliSec" von Hideaki
Iimori einsetzen. Download an dieser Adresse: http://osaxen.com/getmillisec.html

Zum Beschleunigen von Zugriffen auf Listen oder Records hat mich 'a reference to' nie überzeugt.
Damit sich ein messbares Resultat ergibt habe ich die Einträge Deines Beispiels von 6 auf 106
erhöht. Ohne 'a reference to' = 0.060 Sekunden. Mit 'a reference to' = 0.015 Sekunden. Und wieder
ohne 'a reference to', aber mit einem simplen 'my' (vor 'tableData') = 0.006 Sekunden.

Das 'copy xyz to the end of sucheEintrag' und 'set end of sucheEintrag to xyz' sind gleichwertig
(in Sachen Geschwindigkeit). Ich bevorzuge die zweite Form.
---
set tableData to {{|name|:"Bart Simpson", city:"Springfield", zip:"19542", age:12}, ¬
   {|name|:"Ally McBiel", city:"Chicago", zip:"91544", age:28}, ¬
   {|name|:"Joan of Ark", city:"Paris", zip:"53255", age:36}, ¬
   {|name|:"King Tut", city:"Egypt", zip:"00245", age:45}, ¬
   {|name|:"James Taylor", city:"Atlanta", zip:"21769", age:42}}
set tableNewEntry to {|name|:"King Nik", city:"Springfield", zip:"00100", age:33}

set end of tableData to tableNewEntry

set t1 to GetMilliSec -- time tester (Tausendstelsekunden)
set sucheEintrag to {}
repeat with aRecord in my tableData
   if city of aRecord is "Springfield" then set end of sucheEintrag to (aRecord as record)
end repeat
set t2 to GetMilliSec -- time tester (Tausendstelsekunden)
set tt to (t2 - t1) / 1000
display dialog "" & tt

sucheEintrag

---

Im übrigen sehe ich gerade, dass Dir in einem anderen Forum kompetent geholfen wurde!

Gruss, Hans


als Antwort auf: [#419678]

List of Records

Anonym
Beiträge gesamt: 22827

30. Mai 2005, 12:09
Beitrag # 5 von 6
Beitrag ID: #419682
Bewertung:
(1999 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
@Hans Haesler

Als erstes Danke für deine Hilfe. Ich werde mir deine Ratschläge noch genauer anschauen. Lesen ist eine Sache verstehen eine andere.

Dass ich mir in mehreren Foren zu helfen versuche, solltest Du mir nicht übel nehmen. :-) Zumal jeder Einblick eine Hilfe wert ist. Aus der Summe ziehe ich mir dann das beste heraus. Weiter ist es mir lieber wenn ich in einem Deutschsprachigem Forum Hilfe finde, da ich da die Erklärungen besser verstehe.

Ich lebe in einer 5 Sprachigen Familie, und da ist Englisch nicht ganz so gut hängen geblieben, da Sprachen doch nicht meine Stärke sind.

Zum weiteren bin ich DTP-ler, und fühle mich in diesem Forum, auch wenn ich neu bin, besser aufgehoben.

Zum Beispiel finde ich deinen Tip: 'sollte mit 'set end' an 'tableData' angefügt' sehr interessant. Werde ich auf hjeden Fall übernehmen...

Melde mich, wenn ich weiter gekommen bin.

Liebe Grüße

Mr Light ...


als Antwort auf: [#419678]

List of Records

Hans Haesler
  
Beiträge gesamt: 5826

30. Mai 2005, 15:21
Beitrag # 6 von 6
Beitrag ID: #419683
Bewertung:
(1999 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Mr Light,

bitteschön.

Im allgemeinen sind Cross-Poster nicht gern gesehen. Doch bin ich toleranter. Und wenn
sich der Fragesteller wieder meldet, habe ich ihm schon verziehen. Es gibt aber immer
wieder Fälle, wo sich einer nicht mal die Zeit nimmt, eine Antwort zu bestätigen.

Das Anfügen des neuen Records ist mit 'set end' ist der gleiche Fall, wie bei der Liste
in der Wiederholschleife. Wie schon erwähnt, wenn das Anhängen mit "&" vorgenommen wird,
dann wird jedes Mal die komplette, vorhandene Liste kopiert. Beim 'set end of' zwar auch,
aber nur jedes sechzehnte Mal. Deshalb ist diese Konstruktion effizienter.

Gruss, Hans


als Antwort auf: [#419678]
X

Aktuell

Web / SEO / Blockchain / Betriebssystem
300

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
02.07.2024

Online
Dienstag, 02. Juli 2024, 10.00 - 10.30 Uhr

Webinar

In diesen beiden kostenlose Webinaren erfahren Sie, wie Sie mit Hilfe von Enfocus Griffin und dem Impressed Workflow Server Ihren LFP-Workflows optimieren können. 18.06.2024: So optimieren Sie Ihre Prozesse mit Enfocus Griffin 02.07.2024: So sparen Sie Zeit und Geld mit Impressed Workflow Server in der LFP-Edition Griffin: Griffin ist das leistungsstarke Kraftpaket für das automatische Nesting im Großformatdruck. Dank eines ausgeklügelten, KI-basierten Nesting-Algorithmus können Sie mit Griffin Vorlagen schnell und effizient vernutzen – und das klappt auch mit unregelmäßigen Formen perfekt. Das spart Ihnen unzählige Stunden, die Sie bisher mit dem manuellen Nesting und Ausschießen verbracht haben. Einige wichtige Funktionen ≡ Anlage von Beschnittzugaben ≡ Automatische Erzeugung der Schnittkontur ≡ Erstellung von Strichcodes, Textmarkierungen und Registrierungen IWS LFP Edition: Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Mit dem IWS LFP Edition automatisieren Sie Ihre Produktion von der Übernahme der Daten aus dem ERP-System bis zur Erzeugung der verschachtelten Druckform und der Übergabe an den RIP. Phoenix Core ist eine hochentwickelte KI-Technologie für die Planung und das Nesting von Druckerzeugnissen. Anders als herkömmliche Ausschießlösungen arbeitet Phoenix nicht auf Basis von Vorlagen, sondern erzeugt entsprechend der Maschinen- und Produktionsanforderungen druckfertige Layouts „on-the-fly“.

kostenlos

Ja

Organisator: Impressed GmbH

Kontaktinformation: E-Mailschulungen AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=328

So optimieren Sie Ihren LFP-Workflow