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

Listeneintäge intelligent ZUSAMMENFASSEN

 
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> OS X-Snippets
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 19.08.2005 - 00:39    Titel: Listeneintäge intelligent ZUSAMMENFASSEN Antworten mit Zitat

Hallo zusammen.

Ich habe mal eine nicht ganz leicht zu verstehende schlanke Routine erstellt, um Listeneinträge zusammenzufassen (und nicht nur einfach doppelte entfernen; wie es das im Forum schon gibt).

Nehmen wir an, wir haben die unten zu sehende Liste; beispielsweise einen Lieferschein oder eine Zeiterfassung. Es gibt mehrere Einträge doppelt (in diesem Fall die 1, die 5 und die 7).
Die Liste wird sortiert (anhand der korrekten Spalte – der Ordnungsnummer. Das ist in dem Fall Spalte 4, Buchstabe 1 (habe ich zur leichteren Anpassung zuerst festgelegt in sp und bu).

set sp to "4"
set bu to "1"

set liste to "
1977 350 1,6 349867 Eintrag 7
1977 350 2,3 398292 Eintrag 2
1977 350 0,4 394832 Eintrag 3
1977 350 0,1 947383 Eintrag 4
1977 350 0,3 215504 Eintrag 1
1977 350 0,3 645637 Eintrag 5
1977 350 0,9 218283 Eintrag 6
1977 350 0,7 645637 Eintrag 5
1977 350 1,2 215504 Eintrag 1
1977 350 1,1 349867 Eintrag 7"


----- Anfang der eigentlichen Routine

set liste to do shell script "echo \"" & liste & "\" | tr '\\r' '\\n' | sort -n -k " & sp & "." & bu & " | tr '\\n' '\\r'"

set my text item delimiters to ASCII character (13)
set liste to every text item of liste
set liste_duplikatezusammen to {}
set my text item delimiters to ""

repeat with i from 1 to (count of liste) in liste
try
set tempEintrag to item i of liste
if ((characters 14 thru 19 of tempEintrag) as string) is not in (liste_duplikatezusammen as string) then
set the end of liste_duplikatezusammen to tempEintrag
else
set tz to ((((characters 10 thru 12 of tempEintrag) as string) as real) + (((characters 10 thru 12 of (item (i - 1) of liste)) as string) as real) as string)
set last item of liste_duplikatezusammen to ((characters 1 thru 9 of tempEintrag) & tz & (characters 13 thru -1 of tempEintrag)) as string
end if
end try
end repeat

----- Ende der eigentlichen Routine

set my text item delimiters to return
return (liste_duplikatezusammen as string)

return liste_duplikatezusammen


Als Ergebnis erhalten wir sauber und korrekt folgendes Ergebnis:

"1977 350 1,5 215504 Eintrag 1
1977 350 0,9 218283 Eintrag 6
1977 350 2,7 349867 Eintrag 7
1977 350 0,4 394832 Eintrag 3
1977 350 2,3 398292 Eintrag 2
1977 350 1,0 645637 Eintrag 5
1977 350 0,1 947383 Eintrag 4"

Also die Liste ist nach Zahlen sortiert (der Ordnungsnummernspalte und aufsteigend, nicht einfach nur alphanumerisch) und die Einträge sind jeweils der dritten Spalte nach zusammengerechnet:

Aus 0,3 und 1,2 ist 1,5 geworden...

Mit reinen AppleScript-Befehlen wäre solch eine Routine wesentlich länger vom Quellcode und auch wesentlich langsamer. Ein wichtiger Teil ist die vorherige Behandlung über ein kleines Shell Script. Dadurch funktioniert dieses Snippet auch nur unter Mac OS X.
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> OS X-Snippets 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