pyd Postad 10 november, 2008 Share Postad 10 november, 2008 Jag har precis (läs: precis) hittat applescript. Vad jag behöver göra är följande: Steg 1) Läsa in det som finns i meddelandet (content) 2) Få in det som finns i meddelandet till en textfil. 3) Flytta meddelandet till en annan mapp. Steg 1 är klart: tell application "Mail" set theSelection to selection set theMessage to item 1 of theSelection content of theMessage end tell Mitt nästa problem är steg 3. Jag försöker använda "set mailbox of theMessage to mailbox “Folk”". Men jag får bara ett fel, och den verkar klaga på "fnutten" i "Folk".? Detta uppenbarar sig varje gång jag försöker använda mig av fnuttar.... vad gör jag fel? Steg 2: Hur gör man detta? Länk till kommentar Dela på andra webbplatser More sharing options...
pyd Postad 10 november, 2008 Författare Share Postad 10 november, 2008 För att utveckla det hela lite... Varje timma så kommer det (förhoppningsvis, men inte helt säkert) 2st mail. Det ena är skickat till konto1@domän.se Det andra är skickat till konto2@domän.se Dessa meddelanden har ett specifikt subject: [TEST-MAIL] - ÅÅÅÅ-MM-DD HH:MM:SS Vad som ska ske är följande: 1: Mailet till konto1@domän.se ska flyttas till [konto1]-mappen, och konto2@domän.se-mailet ska flyttas till [konto2]-mappen. 2: Hela "content" i mailet (en lång textrad) i konto1 ska klistras in i en textfil. ($HOME/Desktop/logg.txt) (Befintlig, adderas längst ner i dokumentet.) 3: Samma sak för konto2. 4: Mailet ska flyttas till /[konto1]/[klart]. (Samma sak för konto2) Länk till kommentar Dela på andra webbplatser More sharing options...
OldMac Postad 10 november, 2008 Share Postad 10 november, 2008 Kommer jag inte på någonting annat kan jag nog åtminstone hjälpa dig med 'textfils-biten'. Vill du använda en och samma textfil eller skapa en ny textfil för varje meddelande? Om du använder en och samma textfil - hur vill du ha texterna separerade i filen (med någon grafisk markering eller med vita mellanrum - i det senare fallet: ungefär hur stort mellanrum?)? Vilken text-editor räknar du med att använda? Länk till kommentar Dela på andra webbplatser More sharing options...
OldMac Postad 10 november, 2008 Share Postad 10 november, 2008 ...en ide också. "set mailbox of theMessage to mailbox “Folk”" tycker jag liknar att försöka byta namn på mail-boxen som det inkomna mailet ligger i (?). Kanske att bättre vore "move theSelection to..."? Den principen fungerar för att flytta markerade mail från en mailbox till en annan mailbox inom samma konto - och mailboxar kan dessutom anges med nummer i stället för namn. Sålunda: om båda dessa principer fungerar även mellan olika mail-konton går det antagligen att lösa på det viset. Länk till kommentar Dela på andra webbplatser More sharing options...
OldMac Postad 10 november, 2008 Share Postad 10 november, 2008 ...en ytterligare ide och som antagligen har ännu större chans att fungera: tell application "Mail" set theSelection to selection set theMailbox to "Folk" -- brevlådan får egen variabel tell application "Mail" move the theSelection to mailbox theMailbox of account "xxxxx" end tell end tell Alternativt, skippa att placera brevlådan i egen variabel och skriv istället allt i ett svep: move theSelection to mailbox "Folk" of account "xxxx" Länk till kommentar Dela på andra webbplatser More sharing options...
pyd Postad 10 november, 2008 Författare Share Postad 10 november, 2008 Kommer jag inte på någonting annat kan jag nog åtminstone hjälpa dig med 'textfils-biten'. Vill du använda en och samma textfil eller skapa en ny textfil för varje meddelande? Om du använder en och samma textfil - hur vill du ha texterna separerade i filen (med någon grafisk markering eller med vita mellanrum - i det senare fallet: ungefär hur stort mellanrum?)? Vilken text-editor räknar du med att använda? Strängen som finns i "content" ser ut så här: 2008-11-07 23:12:57;namn@domän.se;RCop0bOWhPMMPqw4yztjDZq1d Jag kan formatera mailet lite olika, om det är _mycket_ lättare så finns bara den här strängen i content, annars finns den på rad 4. Exempelmail: Datum: 2008-11-07 23:12:57 Konto: namn@domän.se Ticket: RCop0bOWhPMMPqw4yztjDZq1d Sträng: 2008-11-07 23:12:57;anders@ordningsvakterna.se;RCop0bOWhPMMPqw4yztjDZq1d Och det är exakt så den ska sparas ner i textfilen igen. Jag använder den vanliga texteditorn i osx, "Textredigerare". ...en ytterligare ide och som antagligen har ännu större chans att fungera: tell application "Mail" set theSelection to selection set theMailbox to "Folk" -- brevlådan får egen variabel tell application "Mail" move the theSelection to mailbox theMailbox of account "xxxxx" end tell end tell Alternativt, skippa att placera brevlådan i egen variabel och skriv istället allt i ett svep: move theSelection to mailbox "Folk" of account "xxxx" När jag kör denna (har dock bytt ut "Folk" till "Klara"), så får jag felet "Mail drabbades av ett fel: Kan inte hämta mailbox "Klara" of account "hyden"." Se bifogad fil för upplägg av mailboxar och mappar. Tack för hjälpen dock! Länk till kommentar Dela på andra webbplatser More sharing options...
OldMac Postad 10 november, 2008 Share Postad 10 november, 2008 Synd att jag inte kan hjälpa till med mailbox-problemet. Dock ska jag nog under kvällen kunna föreslå dig en kod för att hantera textfils-delen. Tills vidare: du behöver en skript-bar texteditor - OS X egen går alltså inte att använda. Så är också frågan om du vill ha de olika inskrivningarna av data från olika mail separerade på något vis (grafiska tecken? Vita mellanrum?) och om du vill göra dem i en och samma textfil eller ej? Länk till kommentar Dela på andra webbplatser More sharing options...
OldMac Postad 10 november, 2008 Share Postad 10 november, 2008 Att formera text-strängen som i din uppställning har jag löst. Fast det är ett par saker som jag behöver fråga om innan jag postar kodförslaget: 1. Kommer det ALLTID att vara samma antal tecken i data-strängen för 'Ticket'? [annars återstår lite arbete] Varför står "anders@ordningsvakterna.se" i den avslutande uppställningen men inte i "content"? Dvs, jag vill fråga för att kontrollera att det inte är något fel i beskrivningen -... jag kan utan problem koda innehållet i "content" samt infoga "anders@ordningsvakterna.se". Länk till kommentar Dela på andra webbplatser More sharing options...
pyd Postad 10 november, 2008 Författare Share Postad 10 november, 2008 Tills vidare: du behöver en skript-bar texteditor - OS X egen går alltså inte att använda. Ok, ingen aning.. något förslag? Så är också frågan om du vill ha de olika inskrivningarna av data från olika mail separerade på något vis (grafiska tecken? Vita mellanrum?) och om du vill göra dem i en och samma textfil eller ej? Dom kommer att ligga i samma textfil, ex. epostlogg_svar.txt Vartefter nya mail kommer in så ska epostlogg_svar.txt fyllas på. Senaste ska hamna underst. 1. Kommer det ALLTID att vara samma antal tecken i data-strängen för 'Ticket'? [annars återstår lite arbete] Varför står "anders@ordningsvakterna.se" i den avslutande uppställningen men inte i "content"? Dvs, jag vill fråga för att kontrollera att det inte är något fel i beskrivningen -... jag kan utan problem koda innehållet i "content" samt infoga "anders@ordningsvakterna.se". Ticket är alltid 25 tecken lång. För att göra det enkelt för oss (läs: dig ) så kommer det enda som finns i content alltid att vara strängen: (En rad) [datum/tid];[e-post adress];[ticket] [19-tecken];[26-tecken/10-tecken] (beroende på vilken e-postadress som det skickas till);[25-tecken] Men borde man inte bara helt enkelt kunna välja allt som finns i content? Behöver man veta hur många tecken osv? Typ: "select all from content" Länk till kommentar Dela på andra webbplatser More sharing options...
pyd Postad 10 november, 2008 Författare Share Postad 10 november, 2008 Hmm.. när jag tänker efter så var jag nog lite trött när jag skrev mitt "förtydligande" inlägg Jag har funderat lite mer på exakt vad jag önskar... Jag har dessutom gjort om mailet som skickas, nu skickas bara "Ticket" i content. (E-postadresser är redigerade här för att undvika robotar...) Så här är scenariot: Jag litar inte på loopia:s mail. Varje timma så skickas det två mail ifrån ett utomstående mailkonto. Ett går till a[at]hyden.nu, och det andra går till anders[at]ordningsvakterna.se Dessa mail innehåller följande: Subject: [TEST-MAIL] - "Datum och tid" (Exempel: [TEST-MAIL] - 01:00 - 10 november 2008) Content: ticket (exempel på content: RCop0bOWhPMMPqw4yztjDZq1d) Ticketen är alltid på 25 tecken. Samtidigt som dessa mail skickas loggas detta i en textfil. När jag tar emot mailen så ska följande ske: ------------------------------------------------ 1) Läs in headern (all headers). 2) På rad 3 så står mottagande epostadress, spara ner denna i en variabel. (ex. varKonto) (exempel: Till: <a[at]hyden.nu>" 3) På rad 9 (tror att det alltid är rad 9) så finns tidpunkten för när mailet kom till loopia-servern. (exempel: Received: from mail-core.space2u.com ([62.20.1.181]) (envelope-sender <a[at]hyden.nu>) by s19.loopia.se (qmail-ldap-1.03) with SMTP for <a[at]hyden.nu>; 10 Nov 2008 00:00:12 -0000 4) Läs in rad 9, och strippa bort allt utom "10 Nov 2008 00:00:12". Spara ner detta i en variable (ex. varMottaget) 5) Formatera om detta så det blir " 2008-11-10 00:00:12". (För att det ska stämma i loggfilerna.) 6) Läs in content. 7) Spara ner allt i content till en variabel (ex. varTicket) 8) Spara ner variablarna till en textfil (logg_mottaget.txt) enligt följande: varMottaget;varKonto;varTicket ------------------------------------------------- Hoppas att detta redde ut lite, och ev. gjorde saker lite enklare Länk till kommentar Dela på andra webbplatser More sharing options...
OldMac Postad 10 november, 2008 Share Postad 10 november, 2008 Ok, ingen aning.. något förslag? Javisst. "Text-Wrangler" t ex. Dom kommer att ligga i samma textfil, ex. epostlogg_svar.txtVartefter nya mail kommer in så ska epostlogg_svar.txt fyllas på. Senaste ska hamna underst. Ticket är alltid 25 tecken lång. Bra. Jag ställde dessutom en onödig fråga - eftesom 'ticket' står sist i textsträngen så är denna lätt att extrahera ovasett längd (saken löst redan). Men borde man inte bara helt enkelt kunna välja allt som finns i content?Behöver man veta hur många tecken osv? Typ: "select all from content" Jovisst. Men jag utgår från ditt tidigare uppställda exempel där de olika datatyperna är sorterade framför olika rubriker (det har jag redan fixat). Hmm.. när jag tänker efter så var jag nog lite trött när jag skrev mitt "förtydligande" inlägg Jag har funderat lite mer på exakt vad jag önskar... Jag har dessutom gjort om mailet som skickas, nu skickas bara "Ticket" i content. (E-postadresser är redigerade här för att undvika robotar...) Så här är scenariot: Jag litar inte på loopia:s mail. Varje timma så skickas det två mail ifrån ett utomstående mailkonto. Ett går till a[at]hyden.nu, och det andra går till anders[at]ordningsvakterna.se Dessa mail innehåller följande: Subject: [TEST-MAIL] - "Datum och tid" (Exempel: [TEST-MAIL] - 01:00 - 10 november 2008) Content: ticket (exempel på content: RCop0bOWhPMMPqw4yztjDZq1d) Ticketen är alltid på 25 tecken. Samtidigt som dessa mail skickas loggas detta i en textfil. När jag tar emot mailen så ska följande ske: 1) En regel flyttar mailen till en mapp som heter "Loopia Test"/"Hyden" eller "Ordningsvakterna" beroende på vilket konto som det är skickat till. 2) Läs in headern (all headers). 3) På rad 3 så står mottagande epostadress, spara ner denna i en variabel. (ex. varKonto) (exempel: Till: <a[at]hyden.nu>" 4) På rad 9 (tror att det alltid är rad 9) så finns tidpunkten för när mailet kom till loopia-servern. (exempel: Received: from mail-core.space2u.com ([62.20.1.181]) (envelope-sender <a[at]hyden.nu>) by s19.loopia.se (qmail-ldap-1.03) with SMTP for <a[at]hyden.nu>; 10 Nov 2008 00:00:12 -0000 5) Läs in rad 9, och strippa bort allt utom "10 Nov 2008 00:00:12". Spara ner detta i en variable (ex. varMottaget) 6) Formatera om detta så det blir " 2008-11-10 00:00:12". (För att det ska stämma i loggfilerna. 7) Läs in content. 8) Spara ner allt i content till en variabel (ex. varTicket) 9) Spara ner variablarna till en textfil (logg_mottaget.txt) enligt följande: varMottaget;varKonto;varTicket 10) Markera medelandet som läst, och flytta det till en underliggande mapp som heter "Klart" Hoppas att detta redde ut lite, och ev. gjorde saker lite enklare Hjälp! Jag har redan koden så gott som klar (minus att flytta mailen) och utgående helt från 'content'. Jag behöver bara ändra koden så att senaste data hamnar sist i textfilen. Men jag kan väl tills vidare posta den versionen så snart jag är klar så får du se vad du tycker samt får möjlighet att jobba vidare med koden om du tycker att det behövs? Länk till kommentar Dela på andra webbplatser More sharing options...
OldMac Postad 10 november, 2008 Share Postad 10 november, 2008 Sådärja... tell application "Mail" set theSelection to selection set theMessage to item 1 of theSelection set cc to content of theMessage as string -- ändrad så att den extraherade datan genom kommandot 'content' flyttas till en variabel (* skriptet är komplett så när som på kodrader för flyttning av det markerade mailet från det ena kontots mailbox till det andra kontots mailbox *) my string_Routine(cc) -- anropar subrutin för behandling av textsträngen från 'content' set textResult to the result as string -- tar emot den omformade texten från subrutinen my document_Opener() -- se sökvägen nedan i denna deklarerade subrutin som behöver ändras till din egen sökväg samt med rätt namn på mapp/mappar, etc. delay 2 -- ifall inte text-editorn redan är öppen my print_Routine(textResult) -- rutin för inkopiering av text i textfil end tell on string_Routine© -- subrutin för behandling av textsträngen från 'content' - variabel c tar emot innehållet från variabel cc ovan; texten ser för övrigt lite märklig ut här i postningen (ska vara ett "c" mellan två paranteser, inte ett copyright-tecken!) tell application "Finder" activate set sk to ";" as string set d to "Datum: " as string set k to "Konto: " as string set t to "Ticket: " as string set s to "Sträng: " as string set inserted_String to "anders@ordningsvakterna.se" as string set dt to words 1 thru 3 of c as string -- extraherar datum-strängen från c (=content) set kl to characters 12 thru 19 of c as string -- extraherar klockslag-strängen från c (=content) set dm to characters 21 thru 33 of c as string -- extraherar kontonamn-strängen från c (=content) set tk to characters 35 thru -1 of c as string -- extraherar 'ticket'-strängen från c (=content) -- följande kodrader förbinder de olika typerna av datasträngar med respektive rubriker set dtm to d & dt & space & kl & return as string set kn to k & dm & return as string set tt to t & tk & return as string set ss to s & dt & space & kl & sk & inserted_String & sk & tk as string set allStrings to dtm & kn & tt & ss & return as string return allStrings -- retur av den sammanfogade texten från denna subrutin end tell end string_Routine on document_Opener() -- subrutin för öppnande av textfilen tell application "Finder" activate open document file 1 of folder "B" of folder "A" of startup disk -- koden utgår från att textfilen ligger som enda fil i en mapp; koden här beskriver ordningen i fall textfilen ligger i en mapp i en mapp - första mapp i koden ska i så fall alltså vara den innersta mappen; koden utgår som synes även från att hårddisken är startskiva (om så inte är fallet behöver koden ändras eller om mappen med textfilen förvaras på skrivbordet [desktop] end tell end document_Opener on print_Out(txt) -- subrutin för inkopierande av behandlad text, sparande samt stängande av textfilen tell application "TextWrangler" -- koden utgår från att denna text-editor används; att skriva om annars activate select front document select insertion point after last line of front document set selection to " " & txt -- avståndet mellan citationstecken fungerar som retur-tangent - skapar några raders mellanrum mellan textstyckena close document 1 saving yes end tell end print_Out ---- Jag tar nog ledigt för resten av kvällen.... Länk till kommentar Dela på andra webbplatser More sharing options...
pyd Postad 11 november, 2008 Författare Share Postad 11 november, 2008 Ojoj, vilket jobb du har gjort! Jag tackar, bockar, niger och bugar! Fast eftersom jag ändrade mig lite mitt i allt så bestämde jag mig för att försöka använda delar av ditt script och göra ett eget Jag har kommit en bit på vägen, men fastnat lite... tell application "Mail" set theSelection to selection set theMessage to item 1 of theSelection set theHeader to all headers of theMessage as string set line3 to "Till: <a[at]hyden.nu>" as string set line3Length to length of line3 as string set emailEnd to line3Length - 1 as string set theEmail to characters 8 thru emailEnd of line3 as string display dialog "Totalt antal tecken: " & line3Length display dialog "Antal tecken -1: " & emailEnd display dialog "E-Postadress: " & theEmail end tell Hur gör jag för att bara välja ut hela rad 3 (Där det står set line3 to ...)? För att skryta lite så har jag faktiskt lyckats göra FTP-Funktionen, som jag insåg behövdes, oxå.. helt själv! Länk till kommentar Dela på andra webbplatser More sharing options...
OldMac Postad 11 november, 2008 Share Postad 11 november, 2008 Fast eftersom jag ändrade mig lite mitt i allt så bestämde jag mig för att försöka använda delar av ditt script och göra ett eget Det är utmärkt om du kan använda mina kodrader på det viset. För att skryta lite så har jag faktiskt lyckats göra FTP-Funktionen, som jag insåg behövdes, oxå.. helt själv! Du lär dig snabbt! AppleScript är kanske inte det första programmeringsspråk du har använt? Jag har kommit en bit på vägen, men fastnat lite... tell application "Mail" set theSelection to selection set theMessage to item 1 of theSelection set theHeader to all headers of theMessage as string set line3 to "Till: <a[at]hyden.nu>" as string set line3Length to length of line3 as string set emailEnd to line3Length - 1 as string set theEmail to characters 8 thru emailEnd of line3 as string display dialog "Totalt antal tecken: " & line3Length display dialog "Antal tecken -1: " & emailEnd display dialog "E-Postadress: " & theEmail end tell Hur gör jag för att bara välja ut hela rad 3 (Där det står set line3 to ...)? Variabeln "line3" är i nuvarande kod satt till att innehålla text-strängen "Till: <a[at]hyden.nu>". Om avsikten alltså är att i stället fånga upp textrad nr 3 ur varje mail - eller endast ur headern till varje mail - då är troligen kodraden du söker: set line3 to paragraph 3 of theHeader as string [när jag testade lagrades liknande data i "line3" från headern som du f n har inskriven i variabeln]. Länk till kommentar Dela på andra webbplatser More sharing options...
pyd Postad 12 november, 2008 Författare Share Postad 12 november, 2008 Nu har jag kommit så här långt... det mesta borde var klart, förutom att formatera om datumet.. men det tar vi sen Nu får jag följande fel: {"Från: <a@hyden.nu>Datum: on 12 nov 2008 17.00.06 GMT+01:00 Till: <a@hyden.nu> Kopia: <anders@ordningsvakterna.se> Ämne: [TEST-MAIL] - 17:00 - 12 november 2008 Return-Path: <a@hyden.nu> Delivered-To: a@hyden.nu Received: (qmail 35980 invoked from network); 12 Nov 2008 16:00:09 -0000 Received: from mail-core.space2u.com ([62.20.1.181]) (envelope-sender <a@hyden.nu>) by s19.loopia.se (qmail-ldap-1.03) with SMTP for <a@hyden.nu>; 12 Nov 2008 16:00:09 -0000 Received: from iis2 (iis2.space2u.com [62.20.1.214]) by mail-core.space2u.com (8.14.3/8.13.8) with SMTP id mACG031X024569; Wed, 12 Nov 2008 17:00:03 +0100 Thread-Index: AclE37s5PieZl0sMQieuJEly+eTp8A== Thread-Topic: [TEST-MAIL] - 17:00 - 12 november 2008 Message-Id: <D4FB28A6E6D142DA96E6060A93C12767@iis2> Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit X-Mailer: Microsoft CDO for Windows 2000 Content-Class: urn:content-classes:message Importance: normal Priority: normal X-Mimeole: Produced By Microsoft MimeOLE V6.00.3790.4325 "} matchar inte parametrarna {} för string_Routine. Vad är felet? tell application "Mail" set theSelection to selection set theMessage to item 1 of theSelection set theHeader to all headers of theMessage as string --set theTicket to content of theMessage as string set theTicket to "ticket" as string set theLogFile to "log_recived.txt" my string_Routine(theHeader) set textResule to the sesult as string -- hämtar in obehandlad text my docuement_Opener() delay 2 my print_Routine(textResult) end tell on string_Routine() --För behandling av texten tell application "Finder" activate set dateLine to paragraph 2 of theHeader as string set dateLineLength to length of dateLine as string set dateLineEnd to dateLineLength - 10 as string set theDate to characters 11 thru 22 of dateLine as string set theTime to characters 23 thru dateLineEnd of dateLine as string set emailLine to paragraph 3 of theHeader as string set emailLineLength to length of emailLine as string set emailEnd to emailLineLength - 1 as string set theEmail to characters 8 thru emailEnd of emailLine as string set allStrings to theDate & " " & theTime & ";" & theEmail & ";" & theTicket & return as string return allStrings end tell end string_Routine on document_Opener() --subrutin för öppnande av textfilen tell application "Finder" activate open document file theLogFile of folder "Loopia" of folder "Documents" of folder "anders" of folder "Users" of startup disk end tell end document_Opener on print_Out(txt) --sub för inkopiering av behandlad text, sparande samt stängande av log-fil. tell application "TextWrangler" activate select front document select insertion point after last line of front document set selection to "" & txt close document 1 saving yes end tell end print_Out Länk till kommentar Dela på andra webbplatser More sharing options...
OldMac Postad 12 november, 2008 Share Postad 12 november, 2008 Felmeddelandet beror på hur den deklarerade subrutinen inte innehåller någon mottagande variabel. Förklaring: anropet av subrutinen i huvudrutinen (syftande på det inledande tell-blocket för application "Mail") förmedlar ett datainnehåll genom variablen theHeader till subrutinen - men det finns inte någon motsvarande variabel i subrutinens deklaration (den som inleds med "on string_Routine") som kan ta emot det införda värdet från anropet. Ett smärre följande problem i sammanhanget kan även tänkas vara hur variablen theHeader har samma namn i både i huvudrutinen och inom subrutinen. Jag har inte hängt med i alla förändringar av AppleScript under åren, men åtminstone när jag började skripta AppleScript i början av 2000-talet så var en syntax-regel att man måste använda olika variabelnamn i anrop och deklaratation av subrutiner. Om du inte vill undersöka huruvida denna regel är förändrad så är det å andra sidan enkelt att ändra på detta i koden. Så här skulle då koden kunna se ut med smärre korrigeringar (jag har även rättat några felstavningar som skulle ha påverkat funktionerna negativt): tell application "Mail" set theSelection to selection set theMessage to item 1 of theSelection set the_Header to all headers of theMessage as string -- ändrat variabelnamn från theHeader till the_Header --set theTicket to content of theMessage as string set theTicket to "ticket" as string set theLogFile to "log_recived.txt" -- AppleScript kan vara rätt förlåtande i fråga om datatyps-deklaration, men bör ändå inte datatypen vara (as) string här med? my string_Routine(the_Header) -- ändrat till det nya variabelnamnet i anropet av subrutinen set textResult to the result as string -- hämtar in obehandlad text (korr. av felstavat variabelnamn, etc) my document_Opener()-- korr. av felstavat namn på subrutinen delay 2 my print_Routine(textResult) end tell on string_Routine(theHeader) -- deklarationen av subrutinen ändrad till att inkludera mottagar-variabel tell application "Finder" activate -- osv., etc. Intressant pysselgöra, eller hur? Länk till kommentar Dela på andra webbplatser More sharing options...
OldMac Postad 13 november, 2008 Share Postad 13 november, 2008 Jag passade på och kastade en blick på den övriga koden... 1. I string_Routine går det att komprimera koden samt att även använda en korrektare datatyp (det är säkrare och etablerar en god vana som minimerar en potentiell felkälla som inte skript-editorn alltid uppmärksammar) set dateLine to paragraph 2 of theHeader as string set dateLineEnd to (length of dateLine) - 10 as integer (* komprimerad kod där det erhållna värdet blir ett matematiskt heltal istället för av datatypen sträng pga det erhållna värdet ska användas som matematiskt tal senare i koden - från karaktär nr si till karaktär nr så... *) set theDate to characters 11 thru 22 of dateLine as string set theTime to characters 23 thru dateLineEnd of dateLine as string set emailLine to paragraph 3 of theHeader as string set emailEnd to (length of emailLine) - 1 as integer -- samma typ av ändring här som ovan osv..... 2. I document_Opener saknas citationstecken kring filnamnet. 3. Positioneringen av citationstecknen i "set selection to "" & txt" i i print_Out är ändrad från mitt kodförslag, vilket jag uppmärksammar på i händelse av att texten inte kopieras in i korrekt position relativt dokumentets befintliga text. 4. set theTicket to "ticket" as string set theLogFile to "log_recived.txt" Dessa rader i huvudrutinen verkar inte att användas för något slutligt syfte? (men är kanske under arbete?) Länk till kommentar Dela på andra webbplatser More sharing options...
pyd Postad 13 november, 2008 Författare Share Postad 13 november, 2008 Intressant pysselgöra, eller hur? Hehe, jodå... det fanns lite att göra 2. I document_Opener saknas citationstecken kring filnamnet. Ska det vara så? Det är ju en variablen som deklareras i huvudrutinen, genom "set theLogFile to "log_recived.txt" as string". Men dessvärre så funkar det varken med eller utan "". Om jag kör utan "" så säger den: Variabeln theLogFile är inte definierad. och och om jag kör med "" så hittar den inte filen, vilket inte är så konstigt eftersom "thelogfile" inte finns i den specifierade mappen..? Om jag dock sätter den variablen dirket i rutinen så funkar det, kan man inte hämta variblar ifrån huvudrutinen? 3. Positioneringen av citationstecknen i "set selection to "" & txt" i i print_Out är ändrad från mitt kodförslag, vilket jag uppmärksammar på i händelse av att texten inte kopieras in i korrekt position relativt dokumentets befintliga text. Hmm, ok... så dom behövs? Texten ska bara hamna underst i text-filen... 4. set theTicket to "ticket" as string set theLogFile to "log_recived.txt" Dessa rader i huvudrutinen verkar inte att användas för något slutligt syfte? (men är kanske under arbete?) set theTicket to "ticket" as string <-- denna skulle ha varit bortkommenterad... den ersätts av "set theTicket to content of theMessage as string" set theLogFile to "log_recived.txt" <-- Det är till den filen som allt ska sparas till slut. När jag har gjort alla ändringar så funkar scriptet ända fram till: my print_Out(textResult) Nu vill den skapa ett nytt textdokument, och spara det... Så ska det ju inte vara Den ska ju öppna log_recived.txt, och klistra in det sist i det dokumentet... Nu ser hela koden ut så här: tell application "Mail" set theSelection to selection set theMessage to item 1 of theSelection set the_Header to all headers of theMessage as string set theTicket to content of theMessage as string set theLogFile to "log_recived.txt" as string my string_Routine(the_Header) set textResult to the result as string -- hämtar in obehandlad text my document_Opener() delay 2 my print_Out(textResult) end tell on string_Routine(theHeader) --För behandling av texten tell application "Finder" activate set dateLine to paragraph 2 of theHeader as string set dateLineLength to length of dateLine as string set dateLineEnd to (length of dateLine) - 10 as integer set theDate to characters 11 thru 22 of dateLine as string set theTime to characters 23 thru dateLineEnd of dateLine as string set emailLine to paragraph 3 of theHeader as string set emailLineLength to length of emailLine as string set emailEnd to (length of emailLine) - 1 as integer set theEmail to characters 8 thru emailEnd of emailLine as string --set allStrings to theDate & " " & theTime & ";" & theEmail & ";" & theTicket & return as string set allStrings to theDate & " " & theTime & ";" & theEmail & ";" & return as string return allStrings end tell end string_Routine on document_Opener() --subrutin för öppnande av textfilen tell application "Finder" activate open document file "log_recived.txt" of folder "Loopia" of folder "Documents" of folder "anders" of folder "Users" of startup disk end tell end document_Opener on print_Out(txt) --sub för inkopiering av behandlad text, sparande samt stängande av log-fil. tell application "TextWrangler" activate select front document select insertion point after last line of front document set selection to "" & txt close document 1 saving yes end tell end print_Out Det första problemet nu är att den inte hämtar in variablen "theTicket" som sätts i huvudrutinen. Det andra felet just nu verkar vara när den kommer till print_out-rutinen. Då skapar den ett nytt textdokument, i stället för att öppna logfilen och klistra in det i slutet av den. Länk till kommentar Dela på andra webbplatser More sharing options...
pyd Postad 13 november, 2008 Författare Share Postad 13 november, 2008 Nu har jag pillat lite, och plötsligt så får jag felet "TextWrangler drabbades av ett fel: document 1 förstår inte select-meddleandet." Den klagar på raden "select front document" i print_out-rutinen... Den öppnar log_recived.txt-filen, men sen går det inte längre...? Länk till kommentar Dela på andra webbplatser More sharing options...
pyd Postad 13 november, 2008 Författare Share Postad 13 november, 2008 Detta felet verkar uppstå när inte textwrangler är avslutat helt... Så detta fel kan vi nog bortse ifrån tillsvidare Nu har jag pillat lite, och plötsligt så får jag felet "TextWrangler drabbades av ett fel: document 1 förstår inte select-meddleandet." Den klagar på raden "select front document" i print_out-rutinen... Den öppnar log_recived.txt-filen, men sen går det inte längre...? Länk till kommentar Dela på andra webbplatser More sharing options...
nabben Postad 13 november, 2008 Share Postad 13 november, 2008 Krångla inte till det så använd "inkorgsregler" INSTÄLLNINGAR/MAIL. Går att lägga regel på regel text flytta brev från "KALLE" till mapp LALLALA. -Gör till textdokument varje torsdag som sparas i mapp ,,, Ja vad du vill nästan Länk till kommentar Dela på andra webbplatser More sharing options...
OldMac Postad 13 november, 2008 Share Postad 13 november, 2008 Jag känner mig aningen bortkommen som hjälpare...jag tror att du har fixat en del av problemen som det verkar? Kan du annars specificera vad om återstår tillsammans med att posta hela koden som den ser ut för tillfället? Ett par principfrågor kan jag besvara: 1. "Om jag dock sätter den variablen dirket i rutinen så funkar det, kan man inte hämta variblar ifrån huvudrutinen?" Alla variabler har under normala omständigheter ett 'scoop' (verkningsområde) som bara gäller inom huvudrutiner eller subrutiner - dvs, inte båda på en gång (har man flera huvudrutiner är dock min erfarenhet att vanliga variabler fungerar mellan dem). Vill man arbeta inom en subrutin med att behandla värden från en variabel som hör till en huvudrutin - eller från en subrutin utanför en annan subrutin - så måste variabeln skickas på samma vis som i din kod t ex variabeln the_header skickas ned till subrutinen som tar emot den under namnet theHeader. Undantaget är s k globala variabler som måste ges särskild deklaration i början av skripten (har jag för mig) och som generellt inte brukar rekommenderas (av någon anledning så verkar proffs-programmerare föredra variabler med begränsat arbetsområde - de är antagligen lättare och hålla reda på). Samtidigt är det inte så vanligt att man behöver globala variabler. Vill man skicka flera variabler till en och samma subrutin så går det lika bra. Har du alltså fler variabler att hämta så möter det inga problem. Principen är då följande: my example_of_calling_a_subroutine(variableA, variableB, variableC) ---och som nere i subrutinen tas emot efter samma princip, mottagande variablerna i samma ordning on this_example_of_a_subroutine(theVariableA, theVariableB, theVariableC) 2. "set theLogFile to "log_recived.txt" <-- Det är till den filen som allt ska sparas till slut." Gott och väl. Fast det är subrutinerna som hanterar detta. En subrutin som öppnar filen, en annan subrutin som för in texten och spar. Eller missförstår jag din avsikt med kodraden? Länk till kommentar Dela på andra webbplatser More sharing options...
pyd Postad 13 november, 2008 Författare Share Postad 13 november, 2008 Jag är lite osäker på vad som faktiskt SKA hända (Nackdelen med att redigera ett befintligt stycke kod...) Scriptet körs. Det öppnar upp textredigeraren och klistrar in allt som jag vill där. Sen öppnas textwrangler, skapar ett nytt dokument och sen ta det stopp... Textwrangler undrar om den ska spara filen eller inte. Är problemet att textredigeraren öppnar dokumentet? Och om ja, varför öppnas textredigeraren? Är textredigeraren "default-app" för text-dokument? Sen undrar jag fortfarande hur jag ska lösa så att "theTicket", som sätts i huvudrutinen, ska följa med in i string_routine? i huvudrutinen sätts: set theTicket to content of theMessage as string och i string_routine ska den användas: set allStrings to theDate & " " & theTime & ";" & theEmail & ";" & theTicket & return as string Men när man kör det så säger scriptet att "Variabeln theTicket är inte definierad." Länk till kommentar Dela på andra webbplatser More sharing options...
OldMac Postad 13 november, 2008 Share Postad 13 november, 2008 "Det öppnar upp textredigeraren och klistrar in allt som jag vill där. Sen öppnas textwrangler, skapar ett nytt dokument och sen ta det stopp..." Detta är lite oklart i betydelsen för mig eftersom den textredigare som skriptet förmodas öppna är ju TextWrangler. Men om det är TextWrangler som envisas med att öppna för många dokument så finns det en inställning i den textredigeraren med vilken man kan välja om den ska öppna ett nytt dokument varje gång TextWrangler startar. Jag misstänker att det skulle kunna vara en förklaring och är åtminstone en given felkälla att undersöka efter vad du beskriver. "Sen undrar jag fortfarande hur jag ska lösa så att "theTicket", som sätts i huvudrutinen, ska följa med in i string_routine?" Läser du inte mina förklaringar? Ok, jag tar det igen: du kan skicka flera variabler till en subrutin. I stället för variabelnamnet theTicket i huvudrutinen skulle du t ex kunna döpa om den till the_Ticket. I anropet av subrutinen kan du lägga till the_Ticket efter den redan i anropet inkluderade variablen the_Header. Därefter lägger du till en mottagande variabel i deklarationen av subrutinen. Exempel: Anropet av subrutinen: my string_routine(the_Header, the_Ticket) Inledande deklarationen av subrutinen: on string_routine(theHeader, theTicket) tell app "Finder" -- osv -- 2 st variabler är därmed införda i rutinen från huvudrutinen (du kan föra över mängder av variabler på det viset om det behövs) och theTicket kommer att vara definierad i subrutinen så att du slipper felmeddelande. Länk till kommentar Dela på andra webbplatser More sharing options...
pyd Postad 13 november, 2008 Författare Share Postad 13 november, 2008 Aha Nu funkar det mesta!!! Lite frågetecken kvarstår dock När jag infogar texten i det befintliga dokumentet, så sker följande: Första gången jag kör det, så hamnar det "inklistrade" inte på en ny rad, utan direkt efter existerande text. Nästa gång jag kör den så får det en egen rad, men lägger till en radbrytning ovan och under texten... hur blir man av med detta? Dessutom så måste jag formatera om datumet. finns det någon replace-funktion i samband med arrays? Jag behöver alltså byta ut "nov" mot "11", "jan" mot "1" osv... Länk till kommentar Dela på andra webbplatser More sharing options...
Rekommendera Poster
Arkiverat
Det här ämnet är nu arkiverat och är stängt för ytterligare svar.