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

Grenzen der Dateigröße bei Mengen-Files
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript X
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
asmike
•->
•->


Anmeldedatum: 19.11.2006
Beiträge: 17

BeitragVerfasst am: 29.11.2006 - 14:56    Titel: Grenzen der Dateigröße bei Mengen-Files Antworten mit Zitat

Hallo AS Cracks!

Wenn ich einen set of string in AS deklariere und Ihn
dann komplett als File Abspeichere, muß ich dann gewisse
Obergrenzen bei der entstehenden Dateigröße beachten?

Ich lese die Datei am Anfang des Scriptes komplett ein,
um Telefonnummern zu suchen und ggf. zu ergänzen und
speichere am Ende des scriptes wieder komplett ab.

Any Hints?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 29.11.2006 - 15:31    Titel: Re: Grenzen der Dateigröße bei Mengen-Files Antworten mit Zitat

Dateigrößen Grenzen hängen vom zugrundeliegenden Dateisystem ab. Von daher: Ja! Das solltest Du beachten.

Aber warum liest Du alle Daten auf einmal ein u dann in AS zu suchen? Manchmal hilft ein "do shell script" schneller weiter.
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
asmike
•->
•->


Anmeldedatum: 19.11.2006
Beiträge: 17

BeitragVerfasst am: 29.11.2006 - 21:59    Titel: Antworten mit Zitat

Meine (vielleicht falsche) Theorie:

Dier ganze Menge im Speicher geht beim Finden schneller!?

Genauer: Ich hab bis zu 50.000 Telefonnumern und möchte bei ienr neuen Nummer schnell checken, ob sie schon im set dabei ist.

No etwa: If neue-nummer in Nummernset then...

Wenn Sie noch nicht dabei ist, soll sie dazukommen, also:

Nummernset = Nummernset & neue-Nummer

Geht das vielleicht besser??
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 29.11.2006 - 22:25    Titel: Antworten mit Zitat

asmike hat Folgendes geschrieben:
Geht das vielleicht besser??

Klar. Z.B. mit einer kleinen Datenbankdatei in Perl. Funktioniert mit der Standard Perlinstallaition in Mac OS X. Interesse?
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
asmike
•->
•->


Anmeldedatum: 19.11.2006
Beiträge: 17

BeitragVerfasst am: 29.11.2006 - 23:05    Titel: Antworten mit Zitat

Perl?? Hab ich schon mal gehört! Hat aber nicht unbedingt was mit "do shell" zu tun oder?

Egal - bin voll interessiert!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 29.11.2006 - 23:48    Titel: Antworten mit Zitat

asmike hat Folgendes geschrieben:
Perl?? Hab ich schon mal gehört! Hat aber nicht unbedingt was mit "do shell" zu tun oder?

Kann man mit "do shell script" zusammen verwenden. Hier zunächst mal das reine Perl Script:
Perl hat Folgendes geschrieben:
#!/usr/bin/perl

use strict;
use warnings;

use Getopt::Long;
use Pod::Usage;

###### POD #########################################{{{

=head1 NAME

fibatel FIscher-BAyern-TELephondatenbank (C) 2006 fibatel.info.skeeve@xoxy.net

=head1 SYNOPSIS

fibatel [options] dbname nummer

=head1 DESCRIPTION

B<fibatel> verwaltet eine kleine Datenbank mit Telefonnummern

=head1 OPTIONS

=over 5

=item B<-s> nummer

=item B<-search> nummer

suche Nummer

=item B<-n> name

=item B<-name> name

suche Namen

=item B<-i> nummer,name

=item B<-insert> nummer,name

fuege Nummer und Name ein

=back

=cut

###### END: POD ####################################}}}

##### commandline option variables #################{{{
my (
  $number, # suchstring (Nummer)
  $name, # suchstring (Name)
  $insert, # insertstring (Nummer,Name)
);
##### end commandline option variables #############}}}

##### commandline options ##########################{{{
# defaults
&amp;help unless GetOptions(
  'help|h' => \&amp;help,
  'man' => \&amp;man,
  'search=s' => \$number,
  'name=s' => \$name,
  'insert=s' => \$insert,
);
sub help { exit pod2usage( verbose => 1 ); };
sub man { exit pod2usage( verbose => 2 ); };
##### end commandline options ######################}}}

###### variablen ###################################{{{
my (
  %byname, # Name -> Nummer
  %bynumber, # Nummer -> Name
  $exit, # exitcode
                  # 0 -> ok
          # 1 -> nicht gefunden
          # 2 -> falscher Aufruf
);
###### END: variablen ##############################}}}

my $dbname= shift;

if ( not defined $dbname ) {
  warn &quot;Dateiname fehlt! $0 -man fuer Hilfe.\n&quot;;
  exit 2;
}

dbmopen %byname,&quot;$dbname.byname&quot;,0700
  or die &quot;Fehler beim Zugriff auf '$dbname.byname': $!\n&quot;;
dbmopen %bynumber,&quot;$dbname.bynumber&quot;,0700
  or die &quot;Fehler beim Zugriff auf '$dbname.bynumber': $!\n&quot;;

$exit= 0;

if ( $insert ) {
  ($number, $name)= split /,/, $insert, 2;
  $name= trim_name( $name );
  $number= trim_number( $number );
  $byname{ $name }= $insert;
  $bynumber{ $number }= $insert;
}
elsif ( $number ) {
  $insert= $bynumber{ trim_number( $number ) };
  if ( $insert ) {
    print $insert,&quot;\n&quot;;
  }
  else {
    warn &quot;Nummer $number nicht gefunden.\n&quot;;
    $exit= 1;
  }
}
elsif ( $name) {
  $insert= $byname{ trim_name( $name ) };
  if ( $insert ) {
    print $insert,&quot;\n&quot;;
  }
  else {
    warn &quot;Nummer $name nicht gefunden.\n&quot;;
    $exit= 1;
  }
}
else {
  warn &quot;Falscher Aufruf! $0 -help fuer Hilfe\n&quot;;
  $exit= 2;
}

dbmclose %byname;
dbmclose %bynumber;

exit $exit;
  
sub trim_name {
  my($name)= @_;
  for ($name) {
    s/^\s+//;
    s/\s+$//;
    s/\s\s+/ /g;
  }
  return $name;
}

sub trim_number {
  my($number)= @_;
  for ($number) {
    s/\D//g;
  }
  return $number;
}

(Ich hoffe, das Einfärben hat keinen Müll eingebaut!)

Das Kopierst Du Dir in eine Textdatei.
Speicherst es ab als z.B. /Users/asmike/fibatel
Startest ein Terminal
gibst ein
Code:
chmod +x /Users/asmike/fibatel


ab da kannst Du es im Terminal jederzeit aufrufen mit:

Code:
/Users/asmike/fibatel myphonebook -s 08154711
um eine Nummer zu suchen

Code:
/Users/asmike/fibatel myphonebook -n 'Ben Utzer'
um einen Namen zu suchen

Code:
/Users/asmike/fibatel myphonebook -i 08154711,'Ben Utzer''
um Namen und Nummer einzutragen.

Wenn Du gerne / + - und Space in Nummern verwendest, so kannst Du das beim einfügen gerne tun:
Code:
/Users/asmike/fibatel myphonebook -i '0815/47-11','Ben Utzer''


Beim Suchen kannst Du das natürlich auch, diese Zeichen werden aber immer weggefiltert und der Eintrag wird, bis auf Anführungsstriche, so ausgegeben, wie Du ihn eingetragen hattest.

Damit wäre der Anfang geschafft. Nun müssen wir noch ein AppleScript drumherum bauen, oder? Da sollten bitte andere mit einspringen. Ich bin da nicht so bewandert.
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
spirigwi
•----->
•----->


Anmeldedatum: 10.07.2003
Beiträge: 1529
Wohnort: Olten-CH

BeitragVerfasst am: 30.11.2006 - 08:36    Titel: Antworten mit Zitat

Skeeve hat Folgendes geschrieben:
Nun müssen wir noch ein AppleScript drumherum bauen, oder?
ich finde das derart massiv gut, was du da machst, dass ich mich als völlig unberufener nicht zurückhalten kann und vielleicht dem Herrn der Herren, greatest Snow, nochmals fragen möchte:
hast du die Vorschläge mal gesehen von @hweber, @iScript und @ShooTerKo um eine zusätzliche Rubrik zu machen wie ZB zu AppleScript X noch eine AppleScript Shell&Perl !

(wo im release note stehen würde: nur in AS verpacktes, vielleicht auch im 2. Ansatz erlaubt..
PS: obschon...eine ganz kleinst mikrige FileMaker-Datenbank, gesteuert durch AppleSkript, natürlich das ganze Terminal-Zeugs wie Butter an der Sonne zerschmelzen liesse, das war wohl die Ueberlegung von "Snow" der als "Schnee" auch die Sonne und FileMaker kennt wie kein zweiter Fratze schneiden

asmike hat Folgendes geschrieben:
.. AS deklariere und Ihn
dann komplett als File Abspeichere, muß ich dann gewisse
Obergrenzen bei der entstehenden Dateigröße beachten?

zu dieser interessanten Frage:

hierzu fehlt natürlich auch noch eine AS-Antwort, auf die auch ich gespannt bin.

Soviel "weiss" ich schon ein bisschen:
bei 50000 Telefonnummern hätte man wohl Zeit-Probleme wenn AS eine Index-Aufrufliste macht. Index-Listen mit AS haben den Nachteil, dass man nicht durch Eintippen der Anfangsbuchstaben zum Ziel gelangen kann sondern nur durch Bilschirm-Blättern

Für asmikes Problem würde aber ein schlichter Dialog genügen wenn man denn imstande wäre, die spaces der Telefonnummern wegzu "denken"(ws. durch Definition der Tel-Nummern als Zahlen?).
Falls interessiert kenne ich die Methode, wie man das "ausprobieren" könnte:
Den Datenbank-Inhalt eines FileMaker-Feldes in eine AS-Liste bringen ist eine ganz einfache AS-FM-Code Zeile.
_________________
 Skript-Fan => ein � -Fan =>Scr¿¿-KongFuSius_Kurpfusius
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
asmike
•->
•->


Anmeldedatum: 19.11.2006
Beiträge: 17

BeitragVerfasst am: 30.11.2006 - 11:50    Titel: Antworten mit Zitat

WOW! Das Engagement ist ja grandios - und erst die Reaktionszeit!

Vielen Dank erstmal.

Die PERL-Lösung ist mir zu complicated und für diese wichtige
Anwendung für mich zunächst zu experimentell - aber Danke!!

Das Telefonnummern-Set-Programm in AS wird ohnehin von einem Filemaker-Script aufgerufen, also könnte ich die Telefonnumern natürlich auch als kleine Zusatzdatei in FM implementieren - das Problem:

Ewiges Hin- und Herswitchen in dem AS-Script zwischen Filemaker und
Finder war einfach zu langsam, weshalb ich auf die Idee mit dem Set-of-String in AS kam.

Suchen in Set-of-String für die Telefonnummern ist zwar schnell, aber wie groß darf das Set werden??

Many Thanx again to "Master-Perl"!

Viele Grüße von der Ostsee...

asmike javascript:emoticon('Cool')
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 30.11.2006 - 12:02    Titel: Antworten mit Zitat

asmike hat Folgendes geschrieben:
Die PERL-Lösung ist mir zu complicated und für diese wichtige Anwendung für mich zunächst zu experimentell - aber Danke!!

Sieht nur so aus. Kannst Du von FileMaker CSV Dateien exportieren? Wenn ja, dann exportiere doch mal die Daten (oder ein paar Beispieldatensätze) und dann erweitere ich fibatel, daß diese Daten eingelesen werden können.

Dann brauchen wir nur noch eine Abfrage und eine Einfügemaske.

Alternativ kannst Du natürlich auch alles ins Addressbuch exportieren.
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
asmike
•->
•->


Anmeldedatum: 19.11.2006
Beiträge: 17

BeitragVerfasst am: 30.11.2006 - 13:11    Titel: Antworten mit Zitat

Alles, was notwendig wäre ist Folgendes:

Ich habe im AS-Script eine Variable tn as string, die eine Telefonnummer mit Vorwahl und ohne Leerzeichen enthält.

Jetzt soll geprüft werden, ob mir die Nummer schon mal über den Weg
gelaufen kam: Das mache ich mit einem Set of String liste und der Abfrage:if tn in liste then ... else liste = liste & tn end if. Denn tn soll, falls noch nicht dabei ab sofort mit zur liste gehören.

Bis zu welchem LIMIT läuft dieses AS Script schnell und fehlefrei?


Gruß asmike[/i]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 30.11.2006 - 14:15    Titel: Antworten mit Zitat

asmike hat Folgendes geschrieben:
Bis zu welchem LIMIT läuft dieses AS Script schnell und fehlefrei?

Ein nicht-repräsentativer Test hat ergeben, daß ab spätestens einer Größe von 65536 Elementen die Suchzeit wahrnehmbar wird.

Zudem nimmt die Dauer überproportional zu.

Teste am Besten selbst:
Code:
set listeOhne to {"0805678222"}
set tn to "08154711"

set lng to 1
set resultat to ""
repeat while lng ≤ 1024 * 1024
   set listeMit to listeOhne & tn
   set resultat to resultat & lng & ": "
   set StartZeit to current date
   set fehler to (tn is in listeOhne) or not (tn is in listeMit)
   set EndZeit to current date
   if fehler then
      display dialog "Fehler" & return & reultat with icon caution
      return
   end if
   set resultat to resultat & (EndZeit - StartZeit) & return
   set listeOhne to listeOhne & listeOhne
   set lng to length of listeOhne
end repeat
display dialog "Ergebnis" & return & resultat with icon note


Ich suche immer 2 mal: Einmal mit, einmal ohne Treffer und der Treffer liegt immer am Ende der Liste! Durch einen Fehler im Script hatte ich übrigens bemerkt, daß die Listen offensichtlich linear, von vorne nach hinten durchsucht werden. Es kam nämlich immer "0" als Zeit heraus weil zufällig das 2te Element immer schon das gesuchte war.

Bei einer Größe von 1024*1024 Telefonnummern dauert auf meinem Rechner die Suche bereits > 40 Sekunden (83 die zweimalige)
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
asmike
•->
•->


Anmeldedatum: 19.11.2006
Beiträge: 17

BeitragVerfasst am: 30.11.2006 - 18:24    Titel: Antworten mit Zitat

Ich werde jetzt wohl ´ne Telefonnummern-Datenbank in FM erzeugen.

Vielen Dank für die Hilfe!!

Grüße von der Ostsee...

asmike
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
spirigwi
•----->
•----->


Anmeldedatum: 10.07.2003
Beiträge: 1529
Wohnort: Olten-CH

BeitragVerfasst am: 01.12.2006 - 15:12    Titel: Antworten mit Zitat

asmike hat Folgendes geschrieben:
Ewiges Hin- und Herswitchen in dem AS-Script zwischen Filemaker und
Finder war einfach zu langsam
heisst das, dass jeweils alle 50000 Paketweise auf den Finder kommen und dann in FM-importiert werden mit AS-Befehl? und deshalb willst du mit AS direkt im telefon-Nummern Paket a 50 000 Stück nachschauen ob du die Nr schon hast im FM? Verstehe ich dein Problem richtig?
_________________
 Skript-Fan => ein � -Fan =>Scr¿¿-KongFuSius_Kurpfusius
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
asmike
•->
•->


Anmeldedatum: 19.11.2006
Beiträge: 17

BeitragVerfasst am: 02.12.2006 - 15:22    Titel: Antworten mit Zitat

Nein!

Ich möchte die Telefonnummer-Datei gar nicht erst in FM anlegen, weil ein set of script schneller arbeitet - jedenfalls für die banale Feststellung, ob eine Nummer schonmal dabei war. (if nummer in set_of_nummer).

Ciao mike
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
spirigwi
•----->
•----->


Anmeldedatum: 10.07.2003
Beiträge: 1529
Wohnort: Olten-CH

BeitragVerfasst am: 02.12.2006 - 19:00    Titel: Antworten mit Zitat

asmike hat Folgendes geschrieben:
die Telefonnummer-Datei gar nicht erst in FM anlegen
wo/was /wie/wenn ist denn die Datei, welche die 50 000 Telefonnummern enthält?

PS: Für den Fall, dass es doch eine FM-Datenbank gibt oder ähnliches:
ich kenne kein schnellere Methode um die Existenz einer Tel - Nummer feststellen zu können als diese folgende:
FileMaker-AS im speed unschlagbar wenn in FM gespeichert!
selbst wenn man dazwischen in Finder abtauchen müsste!
hat Folgendes geschrieben:
set NameDatabase1 to "Testbase"
set TelNr to "0412344566782" as number
--
<--das ist natürlich der Hauptgag am ganzen
set cellFoTelNummern to "FoTelNummern"
--
ein Formel-Zahlenfeld wo die Nr nicht als Text vorkommt

tell application "FileMaker Pro"
tell database NameDatabase1 to ¬
show (every record whose cell cellFoTelNummern contains TelNr)
--
enorm schnell hatte mal mühe mit Auswerten, Millisekunden in Datenbanken mit >100 000 Sätzen
end tell

Falls du eine schnellere weisst, bitte schön, ich nehme schamlos das Rennen auf!

Dein Projekt könnte natürlich die Nummern auch in Smile(OS9) oder SkriptEditor OSX editieren, aber nur schon das Einlesen der Daten dauert so seine (Lang-)Weile...

EDIT
tut mir leid hab ich glatt übersehen!
asmike hat Folgendes geschrieben:
Ich habe im AS-Script eine Variable tn as string, die eine Telefonnummer mit Vorwahl und ohne Leerzeichen enthält.
Ich kann mit obigem FM-Skript also nur insofern dienen als es als Alternative zu deiner Lösung oder dann halt als Tester für beliebige Grössen für die SkriptEditor-Variable dienen könnte(durch Export), denn Excel ZB hätte nur 65 000 Datenzeilen zu bieten.

Um trotzdem ein gehöriges Testvolumen zu erzeugen könntest du etwa 2 Mal Excel-Zeilen mit Nummern jeweils fortlaufend "ziehen" dann entstehen Nummern in Folge, das 65 000 Datenzeilen -Zwischenresultat. würdest du jeweils in eine FM DB importieren(2 mal also) und dann als Textfile mit Tab exportieren und dieses durch SkriptEditor öffnen lassen(über das Programmsymbohl ziehen), dann wiesst du wo der Limit liegt.
Sodann, wenn es gelingt mit SkriptEditor zu öffnen, hättest du dort die 130 000 Zeilen mit der Frage: kannst du sie in eine Variable packen?(mit " am Start und " am Schluss).
_________________
 Skript-Fan => ein � -Fan =>Scr¿¿-KongFuSius_Kurpfusius
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript X Alle Zeiten sind GMT + 2 Stunden
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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