[GastForen Programmierung/Entwicklung AppleScript schnittmenge aus zwei listen

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

schnittmenge aus zwei listen

Anonym
Beiträge gesamt: 22827

24. Apr 2009, 09:45
Beitrag # 1 von 5
Bewertung:
(982 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo,

ich möchte die liste "ListFiles" mit der Liste "allFiles" abgleichen. soll heißen, wenn alle items aus "ListFiles" (irgendwo) in der liste "allFiles" enthalten sind, dann soll die schleife verlassen werden. "allFiles" wird ständig aktualisiert (ausgangsordner eines bildbearbeitungsprogramms ...)

folgender ansatz läuft leider endlos obwohl die oben genannten voraussetzungen zum verlassen der schleife erfüllt sind.  (hat aber auch im einzelfall schon funktioniert, zufall¿)


Code
property ausgangsordnerIntellitune : "AZ_Bilder:I_PUNKT:Bildbearbeitung_IntelliTune:Bildausgang:" as alias 

-- als Beispiel
set ListFiles to {"name01", "name02", "name03", "name04"}

set allFiles to {}
set countListFiles to count items of ListFiles
repeat until allFiles contains items 1 thru countListFiles of ListFiles
    set liste01 to (list files of ausgangsordnerIntellitune)
    repeat with i from 1 to length of liste01
       
        set AppleScript's text item delimiters to ":"
        set nameandsuffix to text item -1 of (item i of liste01 as string)
        set AppleScript's text item delimiters to "."
        if (count of text items of nameandsuffix) > 2 then
            set justName to text items 1 thru -2 of nameandsuffix as string
        else
            set justName to text item 1 of nameandsuffix
        end if
        set beginning of allFiles to justName
    end repeat
end repeat

X

schnittmenge aus zwei listen

Hans Haesler
  
Beiträge gesamt: 5822

24. Apr 2009, 10:48
Beitrag # 2 von 5
Beitrag ID: #423025
Bewertung:
(979 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

das kann nicht funktionieren. Hier der Beweis:
---
set ListFiles to {"name01", "name02", "name03", "name04"}

set allFiles to {"name02", "name01", "name03", "name04"}

set countListFiles to count ListFiles

allFiles contains items 1 thru countListFiles of ListFiles
---
Das Ergebnis ist false, obwohl die beiden Listen dieselben Elemente enthalten.

Und wenn es mal funktioniert hat, dann war die Reihenfolge in beiden Listen identisch.

Gruss, Hans


als Antwort auf: [#423024]

schnittmenge aus zwei listen

Hans Haesler
  
Beiträge gesamt: 5822

24. Apr 2009, 13:04
Beitrag # 3 von 5
Beitrag ID: #423026
Bewertung:
(979 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

ich habe nun eine funktionierende Lösung.

Zunächst aber ein paar Bemerkungen zu Deinem Code. Anstelle von ...
---
list files
---
... sollte ...
---
list folder
---
benutzt werden.

Zur Illustration diese beiden Snippets. Bitte separat ausführen,
---
property ausgangsordnerIntellitune : "AZ_Bilder:I_PUNKT:Bildbearbeitung_IntelliTune:Bildausgang:" as alias

set liste01 to (list files of ausgangsordnerIntellitune)
---
Und:
---
property ausgangsordnerIntellitune : "AZ_Bilder:I_PUNKT:Bildbearbeitung_IntelliTune:Bildausgang:"

set liste01 to (list folder ausgangsordnerIntellitune)
---

Das Ausziehen des reinen Dateinamens kann einfacher geschehen.
---
--set nameandsuffix to "test"
set nameandsuffix to "test.txt"
--set nameandsuffix to "t.e.st.txt"
if nameandsuffix contains "." then
   set AppleScript's text item delimiters to "."
   set justName to (text items 1 thru -2 of nameandsuffix) as string
   set AppleScript's text item delimiters to {""}
else
   set justName to nameandsuffix
end if
justName
---
Am Schluss sollten, wie hier gezeigt, den AppleScript's text item delimiters ein leerer String zugewiesen werden.

Meine Lösung kommt im nächsten Beitrag.


als Antwort auf: [#423024]

schnittmenge aus zwei listen

Hans Haesler
  
Beiträge gesamt: 5822

24. Apr 2009, 13:16
Beitrag # 4 von 5
Beitrag ID: #423027
Bewertung:
(979 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hier nun mein Vorschlag. Wenn der Dateiname in 'ListFiles' vorkommt, wird geprüft, ob er schon in 'allFiles' steckt. Falls nicht, wird er dort angefügt und ein Zähler wird um eins erhöht. Sobald der Wert dieses Zählers gleich hoch wie die Anzahl Elemente von 'ListFiles' ist, wird die Schleife verlassen.
---
property ausgangsordnerIntellitune : "AZ_Bilder:I_PUNKT:Bildbearbeitung_IntelliTune:Bildausgang:"

set ListFiles to {"name01", "name02", "name03", "name04"}
set nFiles to count ListFiles

set allFiles to {}
set ctr to 0

set AppleScript's text item delimiters to "."

repeat
   if ctr is nFiles then exit repeat
   set liste01 to list folder ausgangsordnerIntellitune without invisibles
   repeat with i from 1 to count liste01
      set nameandsuffix to (item i of liste01)
      if nameandsuffix contains "." then
         set justName to (text items 1 thru -2 of nameandsuffix) as string
      else
         set justName to nameandsuffix
      end if
      if justName is in ListFiles then
         if justName is not in allFiles then
            set end of allFiles to justName
            set ctr to ctr + 1
         end if
      end if
   end repeat
end repeat

set AppleScript's text item delimiters to {""}

display dialog "Liste komplett." buttons "OK" default button 1 with icon 1
---
Gruss, Hans


als Antwort auf: [#423024]

schnittmenge aus zwei listen

Anonym
Beiträge gesamt: 22827

24. Apr 2009, 15:28
Beitrag # 5 von 5
Beitrag ID: #423028
Bewertung:
(979 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hi hans,

da komme ich ja dank dir noch mit einer funktionierenden lösung in das wochenende :)
den unterschied zw. list folder und list files of habe ich jetzt verstanden ...

danke und schönes wochenende :)


als Antwort auf: [#423024]
X