Applescript's Scripteditor probleem
30 december 2008 - 20:04   
geplaatst door: bcvthul
Scripteditor versie 2.2.1 (100.1)
Applescript 2.0.1
Mac OS X 10.5.6
Macbook (unibody)

Na een x-aantal keer een applescript programma-tje te hebben gebruikt (code aanpassen en een 'Voer uit'  doen) hangt de editor.

Alleen met een force-quit kan ik de boel afbreken.

Wie iemand wat er aan de hand kan zijn?

Applescript's Scripteditor probleem
30 december 2008 - 21:00    reactie #1
geplaatst door: marksch
Hallo bcvthul,

Bedoel je dat het script niet meer ophoudt of bedoel je dat Script Editor crashet? Kun je het script hier posten?

Mark

Applescript's Scripteditor probleem
30 december 2008 - 21:02    reactie #2
geplaatst door: bert
Zit er een loop in je script waar ie niet uitkomt?

Bert

Applescript's Scripteditor probleem
1 januari 2009 - 18:26    reactie #3
geplaatst door: bcvthul
@marksch:
De ' Voer Uit ' knop blijft insensitieve. Het lijkt er op dat het applescript programma blijft lopen (?)
Het crash-t dus niet.

@bert:
Ja er zit een loop in (repeat n times)

Het gekke is dat indien ik het applescript programma na een force quit opnieuw executeer (mbv de scripteditor) er geen problemen zijn.

Applescript's Scripteditor probleem
1 januari 2009 - 19:17    reactie #4
geplaatst door: hitchhiker
Post het script! Er zit, zoals al geopperd, zo goed als zeker een verkeerd loopje in.
Applescript's Scripteditor probleem
1 januari 2009 - 20:29    reactie #5
geplaatst door: bcvthul
Hierbij een script. Nogmaals vaak gaat het goed en het kan voorkomen dat de scripteditor er niet uitkomt (??)

Het probeer-sel-tje gaat over file io. Er wordt ' iets'  naar een file gescreven en daarna weer gelezen en gedeeltelijk verwerkt. Als je het script gaat copieeren let dan even op dat het schrijven al fout zal gaan om dat de directory (hoogstwaarschijnlijk) niet klopt op de machine!

Mocht iemand de fout in het script vinden wat het ' hangen van de scripteditor'  gaat verklaren dan.....


on processLine(str)

set skateRecord to {nameSkater:"", fivehunderdmTime:"", fifthtenhunderdmTime:"", fivethousendmTime:"", tenthousendmTime:"", points:integer}

set nameProcessing to true
set m500timeProcessing to false
set m1500timeProcessing to false
set m5000timeProcessing to false
set m10000timeProcessing to false
set nameString to ""
set m500Time to ""
set m1500Time to ""
set m5000Time to ""
set m10000Time to ""
set resString to ""

set cText to characters of str
set n to count cText
set i to 1
repeat n times
set c to get item i of cText
if c is equal to "\t" or i is equal to n then

if m10000timeProcessing is true then
set tenthousendmTime of skateRecord to resString
set m10000timeProcessing to false
end if

if m5000timeProcessing is true then
set fivethousendmTime of skateRecord to resString
set m5000timeProcessing to false
set m10000timeProcessing to true
end if

if m1500timeProcessing is true then
set fifthtenhunderdmTime of skateRecord to resString
set m1500timeProcessing to false
set m5000timeProcessing to true
end if

if m500timeProcessing is true then
set fivehunderdmTime of skateRecord to resString
set m500timeProcessing to false
set m1500timeProcessing to true
end if

if nameProcessing is true then
set nameSkater of skateRecord to resString
set nameProcessing to false
set m500timeProcessing to true
end if

display dialog resString
set resString to ""
else
set resString to resString & c
end if
set i to i + 1
end repeat

return skateRecord

end processLine

set fp to open for access file "Macintosh HD:Users:beert:Desktop:NewFile" with write permission
write "Sven Kramer\t37.73\t1:46.78\t6:16.78\t13:04.39\n" to fp
write "\n" to fp
write "Ok a little bit more..." to fp
write "\n" to fp
close access fp

set fp to open for access file "Macintosh HD:Users:beert:Desktop:NewFile"
-- set myText to read fp until "."
set myText to read fp -- until "\n"
close access fp
display dialog myText

set pText to paragraphs of myText
set n to count pText
set i to 1
repeat n times
set pLine to get item i of pText
set pLine to pLine & "\t"
processLine(pLine)
set i to i + 1
end repeat

Applescript's Scripteditor probleem
2 januari 2009 - 12:00    reactie #6
geplaatst door: AndreRelink
Ik heb je script even bekeken en getest, er zijn een paar verbeter
punten aan je script. Mogelijk dat scripteditor daar over struikelt.

write "Sven Kramer 37.73 1:46.78 6:16.78 13:04.39" & return to fp
write return to fp
write "Ok a little bit more..." to fp
write return to fp
close access fp

my processLine(pLine)

Succes
André

Applescript's Scripteditor probleem
2 januari 2009 - 16:00    reactie #7
geplaatst door: hitchhiker
Return zijn idd beter dan die "\n" newlines. Veel beter leesbaar. i.p.v. spaties kun je ook tabs gebruiken om dingen uit elkaar te houden. Kom je niet in de war met spaties die mogelijk al in de tekst zitten.

Overigens zie ik verder geen morele of andere bezwaren en bij mij loopt ie en blijft ie ook lopen.
Onderbreek je het script wel eens? Als het script loopt, loopt ie dan altijd helemaal door? m.a.w. Het is alles of niets? Voor de zekerheid zou je als allerlaatste uit te voeren regel nog een beep en/of display dialog kunnen laten uitvoeren.

Applescript's Scripteditor probleem
2 januari 2009 - 18:51    reactie #8
geplaatst door: bcvthul
@AndreRelink en hitchhiker
Bedankt voor jullie feedback.

Al eerder geschreven dat het mij meer een scripteditor probleem lijkt dan applescript. Misschien is het een combinatie, applescript loopt niet goed (af) omdat bijvoorbeeld file io niet goed afgesloten wordt. Het debuggen is ook lastig.

Blijkbaar ben ik op dit moment de enige dit probleem heeft.

Applescript's Scripteditor probleem
2 januari 2009 - 19:00    reactie #9
geplaatst door: hitchhiker
File I/O heb ik ook al eens problemen mee gehad. Als een script onderbroken wordt, dan wordt een ev. open file niet gesloten. Tamelijk irritant. Je krijgt daar wel foutmeldingen van als je dezelfde file weer opnieuw probeert te openen, dus dat zal het niet zijn.
Verder zul je het moeten doen met beeps e.d. Het script is ook weer niet zo uitgebreid dat daar niet snel uit te komen is. Zou vanavond toch nog moeten lukken. :withstupid:
Applescript's Scripteditor probleem
3 januari 2009 - 01:25    reactie #10
geplaatst door: marksch
Hallo bcvthul,

Het script werkt hier prima, voor zover ik kan zien. Hoeveel data heb je (in KB)? Kun je een voorbeeldje van de data posten?

Mark

Applescript's Scripteditor probleem
3 januari 2009 - 23:44    reactie #11
geplaatst door: bcvthul
@marksch:

Het script doet het bij mij ook. Ik heb alleen het idee dat de ScriptEditor zich wel eens verslikt (ik weet alleen waarom niet).

Wat betreft de data. In het programma wordt de data geschreven. Enige tientallen bytes zou ik zeggen. Meer is er niet.

Applescript's Scripteditor probleem
6 januari 2009 - 02:10    reactie #12
geplaatst door: Willemien
ook bij mij hangt het script niet (uiteraard).

het is maar een ideetje, maar misschien raakt NewFile verminkt. hetzelfde filetje wordt geopend en overheengeschreven. als de vorige versie langer was dan blijft de rest staan en wordt ook gelezen. als je NewFile open hebt in een ander programma zou dat ook rare effecten kunnen geven.

ander idee: met het AppleScript-commando log kan je tussenresultaten loggen. er wordt gelogd in het onderste deel van het script-venster als je het op "Events" zet en in het Eventgeschiedenis-venster.

het kan ook best een bug in AppleScript zijn, sinds 10.5 is AppleScript helemaal UniCode en heeft kuren. zie ook http://www.macfreak.nl/cgi-bin/forums/topic.cgi?forum=19&topic=385


btw ken je deze:

set text item delimiters to "\t"
set myText to "Sven Kramer\t37.73\t1:46.78\t6:16.78\t13:04.39"
get text items of myText

resultaat: {"Sven Kramer", "37.73", "1:46.78", "6:16.78", "13:04.39"}

Applescript's Scripteditor probleem
7 januari 2009 - 20:39    reactie #13
geplaatst door: bcvthul
@ Willemien

Bedankt voor de feedback. Ik had al naar zo'n optie gekeken. Ik wil echter de data in een record data type zetten.
En ik doe dat mbv een eigen geschreven functie

Applescript's Scripteditor probleem
7 januari 2009 - 23:21    reactie #14
geplaatst door: hitchhiker
set text item delimiters to tab is duidelijker. Bij mij worden \n en \t direct geëxpandeerd en zie ik dus totaal niet meer wat er staat.

Verder is het als in elke taal: werk je met constanten, geef ze dan een naam.
1. Je ziet beter wat er gebeurt.
2. Het is zuiniger en sneller
3. Maak je een typefout dan krijg je een foutmelding. Maak je een typefout in je "\t" dan kraait geen haan ernaar, maar  je script werkt niet meer.

(Bewerkt door hitchhiker om 23:24, 7-01-2009)

Applescript's Scripteditor probleem
8 januari 2009 - 20:22    reactie #15
geplaatst door: Willemien
@ bcvthul

met de text-item-delimiters-suggestie bedoelde ik iets als:

on processLine(str)
set textItems to text items of str
repeat while number of items of textItems < 5
set textItems to textItems & ""
end repeat
set skateRecord to {nameSkater:item 1 of textItems, fivehunderdmTime:item 2 of textItems, fifthtenhunderdmTime:item 3 of textItems, fivethousendmTime:item 4 of textItems, tenthousendmTime:item 5 of textItems, points:integer}
return skateRecord
end processLine

leek me korter en sneller (bij grote hoeveelheden data).
als het hang-probleem door de zeer-langzaam-aan-bug van AppleScript komt dan kan je het hiermee omzeilen.


@ hitchhiker

ook ik gebruik gewoonlijk constantes, uit principe, ze zijn er niet voor niets, het leest inderdaad makkelijker, je kan er naar zoeken en als je de waarde van een constante wijzigt dan is hij overal waar hij gebruikt wordt gewijzigd. jammer dat je geen eigen constantes kan definiëren in AppleScript. dit stukje script was even snel in elkaar geflanst en ik werd slordig, sorry.

wat bedoel je eigenlijk met zuiniger en sneller?

Applescript's Scripteditor probleem
8 januari 2009 - 22:33    reactie #16
geplaatst door: hitchhiker
Zuiniger omdat een constante maar 1 keer opgeslagen hoeft te worden en sneller omdat je string niet elke keer gelezen en omgezet naar een intern formaat hoeft te worden. Beide hebben meer effect naarmate de string langer is uiteraard. Afhankelijk wat voor (script)taal het is scheelt dat compile- en/of uitvoertijd.


Citaat
Willemien om 20:22, 8-01-2009
jammer dat je geen eigen constantes kan definiëren in AppleScript.

Constantes zijn niks anders dan variabelen met een ander label erop. Applescript kent ze wel degelijk en noemt ze properties; de tab, return en space (?) zijn al voorgedefinieerd.
Applescript's Scripteditor probleem
9 januari 2009 - 19:39    reactie #17
geplaatst door: Willemien
ik dacht dat ik begreep wat een constante was maar blijkbaar niet.
uit de AppleScript Language Guide:

constant
A word with a predefined value.

Constants are generally used for enumerated types. You cannot define constants in scripts; constants can be defined only by applications and by AppleScript.

als ik een property in een script gebruik en het script bewaar als programma dan kan het script de property wijzigen en bewaren. als het script de volgende keer wordt gestart dan heeft de property de waarde van de vorige keer, niet steeds de originele startwaarde. dit vind ik iets anders dan een constante. tab is ook geen constante maar een property en kan worden gewijzigd. tijdens het runnen is het gebruik van tab iets langzamer dan "\t", ik kon het niet laten en heb het uitgeprobeerd.
ook in een taal die wordt gecompileerd, bv c(++), is het gebruik van constanten eerder langzamer dan sneller. zuiniger en sneller kan, maar niet zuiniger en langzamer kan ook.

Applescript's Scripteditor probleem
9 januari 2009 - 21:43    reactie #18
geplaatst door: bcvthul
Het draadje krijgt een wat andere wending. Ik hoop dat de moderator erbarmen heeft.

Ik vind de code suggestie van Willemien wel interressant.