Applescript vraagje (2) - import vraagje
10 februari 2005 - 12:57   
geplaatst door: Creator
Ik wil de mogelijkheid hebben om een ganse serie files te importeren zonder constant de mappen te doorlopen naar het juiste nummer. Het aantal files dat moet geimporteerd worden kan varieren.

Dit is al een code di werkt met 1 nummer:

property numbermap : alias "KRANTEN:Wegwijzer:158001-159000:"
tell application "MultiAd Creator Pro"
--set number_input to display dialog "Nummerke" default answer ""
--set number1 to the text returned of number_input
activate
--add files numbermap of number1
add files {alias "KRANTEN:Wegwijzer:158001-159000:158019:158019"} at end of document 1
end tell

Ik heb geprobeerd zelf een input te creeeren maar dat lukt niet, ik weet niet of jullie ook het programma zullen nodig hebben om hier met te helpen?
Is er een mogelijkheid om in het script een serie bestandsnamen te steken zodat deze automatisch geimporteerd worden in ons programma (MultiAd Creator)? Of moeten we met een input venster werken en nummer per nummer ingeven. de filenaam en de mapnaam hebben altijd dezelde naam.
Het lukt me niet om de nummers in variabelen om tezetten zodat ik met een input venster kan werken.

THX!
D

Applescript vraagje (2) - import vraagje
23 februari 2005 - 14:52    reactie #1
geplaatst door: Creator
Aangezien er geen reactie komt zal ik proberen iets duidelijker te zijn.


property numbermap : alias "KRANTEN:Wegwijzer:158001-159000:"
tell application "MultiAd Creator Pro"
--set number_input to display dialog "Nummerke" default answer ""
--set number1 to the text returned of number_input
activate
--add files numbermap of number1
add files {alias "KRANTEN:Wegwijzer:158001-159000:158019:158019"} at end of document 1
end tell

Ik wil gewoon een input kunnen geven, dus deze regel:

 add files {alias "KRANTEN:Wegwijzer:158001-159000:158019:158019"} at end of document 1

zou zoiets moeten worden

 add files {alias "KRANTEN:Wegwijzer:158001-159000:INPUT A:INPUT A"} at end of document 1

Maar hoe kan ik daar een variabele invoegen?

(Bewerkt door Creator om 14:53, 23-02-2005)

Applescript vraagje (2) - import vraagje
23 februari 2005 - 16:31    reactie #2
geplaatst door: zonapple
alias "KRANTEN:Wegwijzer:158001-159000:158019:158019"

Zoals je ziet is een alias verwijzing een string (tekst tussen "") met het woordje alias ervoor.
Als je er wat aan wilt veranderen moet je de string even apart nemen met

alias "KRANTEN:Wegwijzer:158001-159000:158019:158019" as text

Het resultaat is het string gedeelte, dus alleen "KRANTEN:Wegwijzer:158001-159000:158019:158019".
Hier kun je vervolgens een andere tekst aan vast plakken. Bijvoorbeeld je het de verwijzing in tekstvorm in de variabele x, het nummer in y, dan plak je ze aan elkaar met

set z to x & y

Hopelijk lukt het zo. Zoniet, dan zeg je het maar.

There's 10 types of people in this world, those who understand binary and those who don't.
Applescript vraagje (2) - import vraagje
24 februari 2005 - 10:10    reactie #3
geplaatst door: Creator
Jieha zonneapple is terug, en het "tentamen" is allicht geslaagd?


Ik heb momenteel deze code gemaakt

property nummersmap : alias "KRANTEN:Wegwijzer:158001-159000:" as text

tell application "Finder"
set nummer_input to display dialog "Nummer" default answer ""
set nummer to the text returned of nummer_input
end tell

tell application "MultiAd Creator Pro"
set nummerke to nummersmap & nummer & ":" & nummer
--display dialog nummerke
add files nummerke at end of document 1
end tell

En het werkt! THX


Kan ik bij het ingeven van het nummertje een keuze maken in welke map het nummer moet gezocht worden? Is het mogelijk met een dropdown menu'tjes te werken of verschillende buttons?

(Bewerkt door Creator om 9:38, 25-02-2005)

Applescript vraagje (2) - import vraagje
25 februari 2005 - 09:51    reactie #4
geplaatst door: Creator
Hier is mijn volgende code al, nu kan ik de keuze maken tussen 2 mappen

property krant : alias "KRANTEN:Fonteintje:" as text

set map1 to "579001-580000:" as text
set map2 to "580001-581000:" as text

tell application "Finder"
set tekst to "Welke map?"
set mapnummer to display dialog tekst buttons {map1, map2}
set nummer_input to display dialog "Te importeren nummerke ingeven" default answer ""
set nummer to the text returned of nummer_input

end tell

tell application "MultiAd Creator Pro"
set nummerke to krant & mapnummer & nummer & ":" & nummer
add files nummerke at end of document 1
end tell

maar ik krijg nog een foutmelding

>>>> kan {button returned:"580001-58100:"} niet in een string omzetten

Rara, daar geraak ik nog niet uit.

Applescript vraagje (2) - import vraagje
25 februari 2005 - 10:18    reactie #5
geplaatst door: Creator
Ik heb het nu zo opgelost, nu wordt automatisch gekeken in welke map het nummerke zit!

property mapkeuze1 : alias "KRANTEN:Fonteintje:579001-580000:" as text
property mapkeuze2 : alias "KRANTEN:Fonteintje:580001-581000:" as text


set map1 to "580000:"
set map2 to "580001:"

tell application "Finder"
set nummer_input to display dialog "Te importeren nummerke ingeven" default answer ""
set nummer to the text returned of nummer_input
end tell


tell application "MultiAd Creator Pro"
if nummer < map1 then
set nummerke to mapkeuze1 & nummer & ":" & nummer
add files nummerke at end of document 1
else
set nummerke to mapkeuze2 & nummer & ":" & nummer
add files nummerke at end of document 1
end if
end tell


Wat je toch allemaal kunt met Applescript!  :thumbs-up:

Applescript vraagje (2) - import vraagje
25 februari 2005 - 13:44    reactie #6
geplaatst door: Creator
Is het mogelijk een serie nummers in te voeren, gescheiden doormiddel van een komma(?), zodat ieder nummer toch apart behandeld wordt?
Applescript vraagje (2) - import vraagje
2 maart 2005 - 21:31    reactie #7
geplaatst door: zonapple
Sorry dat ik je een beetje vergeten was.  Ik heb wel vakantie maar ik was te druk met lui zijn. :)

Je kan inderdaad meerdere nummers invoeren door die te scheiden met een door jou gekozen teken. Wat je ook kan doen is het dialoogvenster dat om een nummer vraagt in een repeat-lus zetten net zo lang tot het er genoeg zijn. Voor het scheiden mbv een teken moet je eerst de zogeheten applescript's text item delimiters instellen. Zet je deze bijvoorbeeld op ">", dan 'knipt' applescript een string op de plaats waar een > voorkomt.

Met <a href=applescript://com.apple.scripteditor/?action=new&script=set%20AppleScript%27s%20text%20item%20delimiters%20to%20%22%3A%22%0Dset%20text_item_list%20to%20every%20text%20item%20of%20%22Dit%3Ais%3Aeen%3Avoorbeeldstring%22%0D%2D%2Dset%20AppleScript%27s%20text%20item%20delimiters%20to%20%22%22>deze[/url] code knip je een string bij een ":"

set AppleScript's text item delimiters to ":"
set text_item_list to every text item of "Dit:is:een:voorbeeldstring"
--set AppleScript's text item delimiters to ""

Resultaat: {"Dit", "is", "een", "voorbeeldstring"}

Aan het eind hoor je eigenlijk applescript's text item delimiters weer terug te zetten op "" (de originele stand) omdat deze instelling ook na het sluiten van het script behouden blijft. Een ander script dat hier geen rekening mee houd kan dan in de war raken.

Een lijst van strings (het resultaat van knippen) kan je als het nodig is ook weer aan elkaar plakken met het commando set x_string to y_list as string. Als applescript's text item delimiters nog op ":" stond zal applescript de woorden ook weer aan elkaar plakken met een ":" ertussen. Nog een reden om de delimiters weer op "" te zetten.

Ik heb ook aan handigere manier bedacht om te bepalen in welke map je moet zijn. Aan het nummerke kan je in principe al zien in welke map je moet zijn. Nummer 158019 valt bijvoorbeeld tussen 158001-159000.
De mappen lijken me per 1000 te gaan, dus als je 158019 deelt door 1000 en afrond naar beneden en weer maal 1000 doet kom je op 158000. Voor de bovenste limiet doe je hetzelfde maar rond je af naar boven. Ik heb alvast <a href=applescript://com.apple.scripteditor/?action=new&script=geef_map%28158019%29%0D%0Don%20geef_map%28nummer%29%0D%09set%20bottom_limit%20to%20%28round%20%28nummer%20%2F%201000%29%20rounding%20down%29%20%2A%201000%20%2B%201%0D%09set%20upper_limit%20to%20%28round%20%28nummer%20%2F%201000%29%20rounding%20up%29%20%2A%201000%0D%09return%20%28bottom_limit%20%26%20%22%2D%22%20%26%20upper_limit%29%20as%20string%0Dend%20geef_map>deze[/url] code voor je:

geef_map(158019)

on geef_map(nummer)
set bottom_limit to (round (nummer / 1000) rounding down) * 1000 + 1
set upper_limit to (round (nummer / 1000) rounding up) * 1000
return (bottom_limit & "-" & upper_limit) as string
end geef_map

Resultaat: "158001-159000"

There's 10 types of people in this world, those who understand binary and those who don't.
Applescript vraagje (2) - import vraagje
4 maart 2005 - 10:43    reactie #8
geplaatst door: Creator
Hallo, leuk dat je terug bent ;-)

ik heb mijn script veranderd en jou script er in verweven, maar ik krijg een probleem

property mapkeuze : alias "KRANTEN:Fonteintje:" as text

set input to display dialog "Map?" default answer ""
set map to the text returned of input

geef_map(map)

on geef_map(nummer)
set bottom_limit to (round (nummer / 1000) rounding down) * 1000 + 1
set upper_limit to (round (nummer / 1000) rounding up) * 1000
return (bottom_limit & "-" & upper_limit) as string
end geef_map


tell application "MultiAd Creator Pro"
set nummerke to mapkeuze & geef_map & map & ":" & map
add files nummerke at end of document 1
end tell

bij het runnen van het script en na het invoeren van een nummer krijg ik volgende foutmelding
kan <<handler geef_map>> niet in een string omzetten.

Daar geraak ik niet uit!

THX!

Applescript vraagje (2) - import vraagje
5 maart 2005 - 08:58    reactie #9
geplaatst door: zonapple
In het onderste stuk staat de regel

set nummerke to mapkeuze & geef_map & map & ":" & map

Hier denkt applescript dat geef_map een variabele is waar een string in zit, maar kan die niet vinden. Geef_map is namelijk een handler en daarbij zet je altijd twee haakjes erachter, bv handler(). In dit geval staat er ook nog map tussen de haakjes omdat de handler die nodig heeft voor het bepalen van de mapnaam.

In een tell-block moet voor geef_map(map) ook my komen te staan, omdat applescript dan weet dat het binnen zichzelf naar de handler geef_map moet zoeken en niet in MultiAd Creator Pro. Buiten een tell-blobk hoeft dat niet maar mag het wel.

Anyway, <a href=applescript://com.apple.scripteditor/?action=new&script=property%20mapkeuze%20%3A%20alias%20%22KRANTEN%3AFonteintje%3A%22%20as%20text%20%0D%0Dset%20input%20to%20display%20dialog%20%22Map%3F%22%20default%20answer%20%22%22%20%0Dset%20map%20to%20the%20text%20returned%20of%20input%20%0D%0Don%20geef_map%28nummer%29%20%0D%20set%20bottom_limit%20to%20%28round%20%28nummer%20%2F%201000%29%20rounding%20down%29%20%2A%201000%20%2B%201%20%0D%20set%20upper_limit%20to%20%28round%20%28nummer%20%2F%201000%29%20rounding%20up%29%20%2A%201000%20%0D%20return%20%28bottom_limit%20%26%20%22%2D%22%20%26%20upper_limit%29%20as%20string%20%0Dend%20geef_map%20%0D%0D%0Dtell%20application%20%22MultiAd%20Creator%20Pro%22%20%0D%20set%20nummerke%20to%20mapkeuze%20%26%20my%20geef_map%28map%29%20%26%20%22%3A%22%20%26%20map%20%26%20%22%3A%22%20%26%20map%20%0D%20add%20files%20nummerke%20at%20end%20of%20document%201%20%0Dend%20tell>zo[/url] zou de code moeten werken:

property mapkeuze : alias "KRANTEN:Fonteintje:" as text

set input to display dialog "Map?" default answer ""
set map to the text returned of input

on geef_map(nummer)
set bottom_limit to (round (nummer / 1000) rounding down) * 1000 + 1
set upper_limit to (round (nummer / 1000) rounding up) * 1000
return (bottom_limit & "-" & upper_limit) as string
end geef_map


tell application "MultiAd Creator Pro"
set nummerke to mapkeuze & my geef_map(map) & ":" & map & ":" & map
add files nummerke at end of document 1
end tell

There's 10 types of people in this world, those who understand binary and those who don't.
Applescript vraagje (2) - import vraagje
9 maart 2005 - 14:23    reactie #10
geplaatst door: Creator
Hallo, dit werkt inderdaad zeer goed!


Ik heb dit nu ook willen toepassen op de "idem_nummers" ;-)

Zodat ik daar ook niet meer de mappen moet definieren

-- Idems v1.6 - 05.03.09


--Vul hier de verwijzing in naar de map met mappen met nummers
property nummersmap : alias "KRANTEN:Wegwijzer:" as text
property idemmap : alias "KRANTEN:Wegwijzer:idems2:"

--Vraag om het oude nummer
set oud_dialoog to display dialog "Oud nummer?" default answer ""
set oud_nummer to the text returned of oud_dialoog

geef_map(oud_nummer)

on geef_map(nummer)
set bottom_limit to (round (nummer / 1000) rounding down) * 1000 + 1
set upper_limit to (round (nummer / 1000) rounding up) * 1000
return (bottom_limit & "-" & upper_limit) as string
end geef_map

--Vraag om het nieuwe nummer
set nieuw_dialoog to display dialog "Nieuw nummer?" default answer ""
set nieuw_nummer to the text returned of nieuw_dialoog


tell application "Finder"
--Zoek de map met het oude nummer op
set oudmap to nummersmap & my geef_map(oud_nummer) & ":" & oud_nummer

--Maak een nieuwe map met het nummer nieuw_nummer of kijk of er al een bestaat
if not (exists folder nieuw_nummer of idemmap) then
set nieuwmap to (make new folder at idemmap with properties {name:nieuw_nummer}) as text
else
set nieuwmap to (folder nieuw_nummer of idemmap) as text
end if

display dialog oudmap
display dialog nieuwmap

--Kopieer de bestanden naar de nieuwe map
set oud_files to every item of oudmap
--------------------- !!!!!!!!!
duplicate oud_files to nieuwmap replacing yes
--------------------- !!!!!!!!!
set nieuw_files to every item of nieuwmap
set nieuw_files to my convert_to_alias(nieuw_files)

--Zoek alle bestanden op waar het oude nummer in voorkomt en verander het naar het nieuwe nummer
set rename_list to every item of nieuwmap whose name contains geef_map
repeat with this_file in rename_list
set oude_naam to the name of this_file
set nieuwe_naam to my replace_chars(oude_naam, geef_map, nieuw_nummer)
set the name of this_file to nieuwe_naam
end repeat

open file nieuw_nummer of nieuwmap

end tell

tell application "MultiAd Creator Pro"
activate

set flos to every text flow of document 1
repeat with flo in flos
set wds to every word of flo

set numWds to number of items of wds

repeat with i from 1 to numWds
if item i of wds is oud_nummer then
set text of word i of flo to nieuw_nummer
end if
end repeat
end repeat

save document 1
print document 1 without interaction
close document 1

end tell

--Dit is een handler om de file path van de Finder om te zetten naar alias paths

on convert_to_alias(these_files)
set alias_list to {}
repeat with this_file in these_files
set the end of alias_list to this_file as alias
end repeat
return alias_list
end convert_to_alias

on replace_chars(this_text, search_string, replacement_string)
set AppleScript's text item delimiters to the search_string
set the item_list to every text item of this_text
set AppleScript's text item delimiters to the replacement_string
set this_text to the item_list as string
set AppleScript's text item delimiters to ""
return this_text
end replace_chars

Maar dit werkt nog niet
Ik krijg een foutmelding op de plaats waar ik ----------- !! geplaatst heb, bij duplicate oud_files to....
en de foutmelding is deze -> Finder kreeg een fout: Handler kan objecten van deze klasse niet verwerken.

Als ik met display dialog de waarden oudmap en nieuwmap bekijk, lijkt alles te kloppen, maar ze zijn blijkbaar verkeerd gedefinieerd(??)

THX!

Applescript vraagje (2) - import vraagje
10 maart 2005 - 13:06    reactie #11
geplaatst door: zonapple
Het feit dat je ze met display dialog kan bekijken geeft al aan wat er fout is. De variabele oudmap is een string in plaats van een alias. Als je de regel

set oudmap to nummersmap & my geef_map(oud_nummer) & ":" & oud_nummer
veranderd naar

set oudmap to alias (nummersmap & my geef_map(oud_nummer) & ":" & oud_nummer)
lukt het waarschijnlijk wel.

(Bewerkt door zonapple om 13:06, 10-03-2005)

There's 10 types of people in this world, those who understand binary and those who don't.
Applescript vraagje (2) - import vraagje
10 maart 2005 - 14:22    reactie #12
geplaatst door: Creator
Bedankt! maar nu een ander foutmelding ;-)

Het bestand "K" is onvindbaar - rara

En deze foutmelding krijg ik hier

on convert_to_alias(these_files)
set alias_list to {}
repeat with this_file in these_files
set the end of alias_list to this_file as alias
end repeat
return alias_list
end convert_to_alias

De letter "K" is de eerste letter van de schijfnaam, zou het daar iets met te zien hebben?

--Kopieer de bestanden naar de nieuwe map
set oud_files to every item of oudmap
duplicate oud_files to nieuwmap replacing yes
set nieuw_files to every item of nieuwmap
set nieuw_files to my convert_to_alias(nieuw_files)

ik denk dat het probleem hier in de laatste regel zit, want daar wordt verwezen naar de handler onderaan het script.

(Bewerkt door Creator om 14:58, 10-03-2005)

Applescript vraagje (2) - import vraagje
4 april 2005 - 11:49    reactie #13
geplaatst door: zonapple
Oei, ik was dit draadje een beetje vergeten denk ik. Maar goed, eigenlijk heb ik ook geen idee wat hier gebeurd. Meestal loop ik in zo'n geval de variabelen langs tot waar de error ontstaat. Omdat de handler blijkbaar een bestand "K" in de variabele nieuw_files vind zou je in nieuw_files moeten kijken wat daar nou eigenlijk in staat. Omdat je met een lang script werkt is de regel waarbij de foutmelding optreed meestal niet de laatste, dus kan je niet in het result field zien wat er in de nieuw_files staat. Misschien lukt het als je onder

set nieuw_files to every item of nieuwmap

display dialog (item 1 of nieuw_files as string)
zet. Als het goed is krijg je zo het pad te zien van het eerste bestand in nieuw_files. Daarna kun je de 1 in een 2 veranderen zodat je de 2e kunt bekijken enz. tot je ergens op een verdacht antwoord komt.

(Bewerkt door zonapple om 11:49, 4-04-2005)

There's 10 types of people in this world, those who understand binary and those who don't.
Applescript vraagje (2) - import vraagje
27 april 2005 - 10:23    reactie #14
geplaatst door: Creator
Eindelijk weer tijd gevonden om aan het script verder te werken.

als ik het resultaat wil zien van mijn variabel "nieuw_files" krijg ik dit
- "KRANTEN:Fonteintje:idems2:000008:580535"

maar ik zou dit als resultaat moeten hebben
- "KRANTEN:Fonteintje:idems2:000008"

hoe kan ik zo iets inkorten?

THx!!

(Bewerkt door Creator om 10:39, 27-04-2005)

(Bewerkt door Creator om 10:47, 27-04-2005)