Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

property dynamisch erzeugen

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jens Hoffmann
•--->
•--->


Anmeldedatum: 07.05.2001
Beiträge: 175

BeitragVerfasst am: 03.09.2001 - 11:56    Titel: property dynamisch erzeugen Antworten mit Zitat

Hi Forum
Ist es möglich, eine property dynamisch zu erzeugen? Oder muss hier ein Textfile ran?
Konkret geht es um eine Liste (als property). Für jeden neuen Listeneintrag brauche ich eine neue property. Ebenso soll die neue property wieder entfernt werden, wenn das item aus der Original-Liste entfernt worden ist.
Grüße, Jens

(Geändert von Jens Hoffmann am 12:38 Uhr am 3 Sep. 2001)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
macgix
•--->
•--->


Anmeldedatum: 13.12.2000
Beiträge: 206
Wohnort: K–ln

BeitragVerfasst am: 09.09.2001 - 20:05    Titel: property dynamisch erzeugen Antworten mit Zitat

Lieber Jens, ich habe Deine Frage noch nicht ganz verstanden. Meinst Du wirklich "property", also Variablen, deren Werte permanent gespeichert und im Skript selbst in allen Handlern gültig sind, oder meinst du damit die einzelnen Elemente einer Liste, die selbst als property gespeichert ist?

Letztendlich könntest Du aber auch einen "record" meinen, wie z.B.:

property tList : {name des ersten elementes:wert,name des zweiten Elementes:wert,...}

In letztem Falle kann man einen Eintrag nur entfernen, indem man den record durchläuft und aus allen nicht leeren Elementen einen Neuen bildet, danach den Alten löscht.

Meinst Du es so?
_________________
[macgix]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jens Hoffmann
•--->
•--->


Anmeldedatum: 07.05.2001
Beiträge: 175

BeitragVerfasst am: 10.09.2001 - 10:06    Titel: property dynamisch erzeugen Antworten mit Zitat

Ich meine eine property, deren Werte permanent gespeichert und im Skript selbst in allen Handlern gültig ist.

Ich habe eine property, z.B.
property dieProjekte: {Projekt1, Projekt2}

Für jeden Eintrag  brauche ich nun eine weitere property, z.B.
property PfadProjekt1: {derPfad}

Die Einträge von dieProjekte können sich ständig ändern und es ist nicht klar, wieviele Einträge die property haben wird.
Es wird z.B. ein Eintrag Projekt3 hinzugefügt. Nun brauche ich die Eintsprechende property PfadProjekt3. Und wenn der Eintrag Projekt3 wieder gelöscht wird, soll auch PfadProjekt3 wieder gelöscht werden (wobei dies nicht unbedingt nötig wäre, da man die Werte von PfadProjekt3 ja auch überschreiben kann).

Vielleicht gibt es da auch andere Möglichkeiten. Eine, die mir bekannt ist, ist das Speichern in einer Textdatei, was aber mehr Aufwand ist.

Grüße, Jens
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
macgix
•--->
•--->


Anmeldedatum: 13.12.2000
Beiträge: 206
Wohnort: K–ln

BeitragVerfasst am: 10.09.2001 - 12:11    Titel: property dynamisch erzeugen Antworten mit Zitat

So, nun habe ich es wohl kapiert. Der informatisch korrekte Ansatz für AppleScripter ist dieser (Eventlog zuvor öffnen!):

property Projekte : {¨
{name:"projekt1", contents:{ "data1", "data2", "data3" }}, ¨
{name:"projekt2", contents:{ "data4", "data5", "data6" }}, ¨
{name:"projekt3", contents:{ "data7", "data8", "data9" }} ¨
}

on run

log "----------------------------------------------------"
log name of item 1 of Projekte
log "----------------------------------------------------"
log contents of item 1 of Projekte
log "----------------------------------------------------"

-- Nun überschreiben der Einträge des Records

set name of item 2 of Projekte to ""
set contents of item 2 of Projekte to { "data7", "data8", "data9" }

log name of item 2 of Projekte
log "----------------------------------------------------"
log contents of item 2 of Projekte
log "----------------------------------------------------"


end run


Damit lassen sich die "Projekte" über Indizes ansprechen sowie alle Daten "Projektname" und "Projektcontents" verändern, überschreiben oder wie folgt löschen:

Setzte alle Inhaltsfelder auf "" und prüfe im Skript, ob Datenfeld leer ist.- Wenn ja, dann ignoriere diesen Eintrag und erhöhe den Index um eins.

Da leere Variablen kein RAM-Speicher beanspruchen ist es statthaft, diese in "Projekte" leer bestehen zu lassen.

Es bietet sich natürlich an, eine Routine zu schreiben, die aus "Projekte" immer einen neuen von leeren Einträgen befreiten record bildet und diesen dann in "Projekte" zurückspeichert:


-- Neuen Record bilden
set Projekte to my cleanUpRecord(Projekte)

end run

on cleanUpRecord(r_ecord)

set temp to {}
repeat with a_item in r_ecord

if name of a_item is not "" then
set temp to temp & a_item
end if

end repeat

set r_ecord to temp
set temp to {}

return r_ecord

end cleanUpRecord


Besser so?
_________________
[macgix]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
macgix
•--->
•--->


Anmeldedatum: 13.12.2000
Beiträge: 206
Wohnort: K–ln

BeitragVerfasst am: 10.09.2001 - 12:40    Titel: property dynamisch erzeugen Antworten mit Zitat

Zwei Fehler musste ich noch korrigieren. Hier nochmal das komplette Skript, fehlerbereinigt und kommentiert:

property Projekte : {}

on run

-- Werden die Werte direkt in der property definiert, besteht die
-- Liste im zweiten Durchlauf nur aus zwei Elementen, im Dritten nur aus Einem!
-- Deswegen wird Projekte hier definiert. Dann sind es immer drei Elemente
-- Diese Eigenschaft kann natürlich ganz nach Wunsch ausgenutzt werden!

set Projekte to
{name:"projekt1", contents:{ "data1", "data2", "data3" }}, ¨
{name:"projekt2", contents:{ "data4", "data5", "data6" }}, ¨
{name:"projekt3", contents:{ "data7", "data8", "data9" }} ¨
}

-- Verwendet die Any2Str OSAX von Digital Technologies FaceSpan 3.5
-- Hat man diese nicht, schreibt man "log Projekte", erhält aber den
-- Eintrag nicht so formatiert, wie er es eigentlich ist, die Klammern fehlen!
-- Die Werte stimmen aber und es genügt für's Verständnis auch ohne Any2Str

log (Any2Str (Projekte))

-- Nun überschreiben der Einträge des Records
set name of item 2 of Projekte to ""
set contents of item 2 of Projekte to { "data7", "data8", "data9" }

log (Any2Str (Projekte))

-- Neuen Record bilden
set Projekte to my cleanUpRecord(Projekte)

log (Any2Str (Projekte))

end run

on cleanUpRecord(r_ecord)

set temp to {}

repeat with a_item in r_ecord

if name of a_item is not "" then

-- "as record" ist GANZ wichtig!
set temp to temp & {a_item as record}

end if

end repeat

return temp

end cleanUpRecord


Cool
_________________
[macgix]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jens Hoffmann
•--->
•--->


Anmeldedatum: 07.05.2001
Beiträge: 175

BeitragVerfasst am: 10.09.2001 - 15:52    Titel: property dynamisch erzeugen Antworten mit Zitat

Erst mal Danke, macgix. Das ist das, wonach ich gesucht habe.

Die eckigen Klammern bei "set Projekte to..." müssen noch durch 2 Geschweifte ersetzt werden (Übersetzungsfehler des Ikonboards, die beiden Klammern mit Leerzeichen trennen verhindert das), so dass der Part so aussieht :

set Projekte to {¨
{name:"projekt1", contents:{"data1", "data2", "data3"} }, ¨
{name:"projekt2", contents:{"data4", "data5", "data6"} }, ¨
{name:"projekt3", contents:{"data7", "data8", "data9"} } ¨
}

Eins krieg ich aber nicht hin: einen neuen Eintrag zu generieren. Kannst Du vielleicht mal kurz erläutern, wie ich einerseits ein "ganzes Projekt" anspreche, also z.B. den Eintrag:

{name:"projekt3", contents:{"data7", "data8", "data9"}}

und anderseits auf die Komponenten eines solchen zugreife, also auf den Namen oder den content?

Danke und Grüße
Jens
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
macgix
•--->
•--->


Anmeldedatum: 13.12.2000
Beiträge: 206
Wohnort: K–ln

BeitragVerfasst am: 10.09.2001 - 17:07    Titel: property dynamisch erzeugen Antworten mit Zitat

So, nun mit zwei neuen Handlern:

addEntryToRecord(rec_list, new_record) und
sortRecords(r_ecord)

property Projekte : {}

on run

-- Werden die Werte direkt in der property definiert, besteht die
-- Liste im zweiten Durchlauf nur aus zwei Elementen, danach nur aus einem!
-- Deswegen wird Projekte hier definiert. Dann sind es immer drei Elemente
-- Diese Eigenschaft kann natürlich ganz nach Wunsch ausgenutzt werden!

set Projekte to
{name:"projekt1", contents:{ "data1", "data2", "data3" } } , ¨
{name:"projekt2", contents:{ "data4", "data5", "data6" } } , ¨
{name:"projekt3", contents:{ "data7", "data8", "data9" } } ¨
}

-- Verwendet die Any2Str OSAX von Digital Technolies FaceSpan 3.5
-- Hat man diese nicht, scgheibt man "log Projekte", erhält aber den
-- Eintrag nicht so formatiert, wie er es in eigentlich ist, die Klammern fehlen!
-- Die Werte stimmen aber und es genügt für's Verständnis auch ohne Any2Str
log (Any2Str (Projekte))

-- Nun überschreiben der Einträge des Records
set name of item 1 of Projekte to ""
set contents of item 1 of Projekte to { "data1", "data2", "data3" }
log (Any2Str (Projekte))

-- Neuen Record bilden
set Projekte to my cleanUpRecord(Projekte)
log (Any2Str (Projekte))

set Projekte to my addEntryToRecord(Projekte, {name:"projekt1", contents:{ "data10", "data11", "data12" } } )
return (Any2Str (Projekte))

end run

on addEntryToRecord(rec_list, new_record)

-- Nun, das kennen wir ja bereits
set rec_list to rec_list & {new_record as record}

-- Aber das hier ist neu
set rec_list to my sortRecords(rec_list)

return rec_list

end addEntryToRecord

on sortRecords(r_ecord)

-- Zuerst die Namen als Liste aus dem Record extrahieren
set a_name_list to {}
repeat with a_item in r_ecord
set a_name to name of a_item
set a_name_list to a_name_list & a_name
end repeat

-- Dann diese Namensliste alphabetisch sortieren (Bubblesort)
set sorted_record to a_name_list
repeat with n from 1 to sorted_record's length
repeat with j from 1 to (sorted_record's length) - n
if sorted_record's item j > sorted_record's item (j + 1) then
set temp to sorted_record's item j
set sorted_record's item j to sorted_record's item (j + 1)
set sorted_record's item (j + 1) to temp
end if
end repeat
end repeat

-- Nun die Einträge im Record gemäß der sortierten Namensliste neu sortieren,
-- respektive neuen Record in geänderter Reihenfolge erzeugen
set new_rec to {}
repeat with l from 1 to count of sorted_record
repeat with n in r_ecord
set n_temp to n as record
if ((item l of sorted_record) as text) = (name of n_temp) then set new_rec to new_rec & {n as record}
end repeat
end repeat

return new_rec

end sortRecords

on cleanUpRecord(r_ecord)

set temp to {}
repeat with a_item in r_ecord
if name of a_item is not "" then
-- "as record" ist GANZ wichtig!
set temp to temp & {a_item as record}
end if
end repeat
return temp

end cleanUpRecord


Müsste ich eigentlich schon fast etwas für berechnen, ist keine simple Sache gewesen, aber sei's drum für dieses Mal; hoffentlich lesen es auch genug Leute damit sie möglichst viele etwas davon haben; dann macht's mein Können wenigstens ein wenig bekannterÖ Cool

Gruß,

Thomas
_________________
[macgix]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jens Hoffmann
•--->
•--->


Anmeldedatum: 07.05.2001
Beiträge: 175

BeitragVerfasst am: 13.09.2001 - 10:58    Titel: property dynamisch erzeugen Antworten mit Zitat

Hallo macgix
Danke für die Komplettlösung. Möge AS Dich reich und berühmt machen...

Kam aber noch nicht zum Ausprobieren. Ich hoffe, ich komme da zurecht.

Grüße, Jens
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Forum Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group
Deutsche Übersetzung von phpBB.de


AppleScript für absolute Starter