Suchen mit Hilfe von Liste/Dropdown

Aktuelle Version: 12.6 (09.06.2017)
Alles zum Thema Directory Opus
josinoro
Beiträge: 166
Registriert: 4. Aug 2013 19:58
Version DOpus: Pro

Re: Suchen mit Hilfe von Liste/Dropdown

Beitrag von josinoro » 18. Nov 2015 11:25

Hallo tbone,

wie kann ich es bewerkstelligen, dass der Pfad der Suchliste nicht fest im Quelltext stehen muss?
Auf meinem Laptop habe ich eine andere Verzeichnisstruktur. deshalb wäre es hilfreich, wenn ich die Suchliste lediglich in ein DOpus-Verzeichnis kopieren müsste. Dann könnte ich meine Schalter und sonstige Einstellungen ohne Anpassungen übernehmen.

Mein bisherigen Versuche

Code: Alles auswählen

//var FILENAME="E:\\Directory Opus\\Suchliste.txt";
var FILENAME= DOpusAliases("dopusdata").path & "\\Suchliste.txt";
sind bisher gescheitert.

MfG

josinoro

Benutzeravatar
tbone
Berater
Beiträge: 394
Registriert: 22. Nov 2014 21:16
Betriebssystem: 7*64
Produkt: aktuelle Beta-Version
Version DOpus: Pro

Re: Suchen mit Hilfe von Liste/Dropdown

Beitrag von tbone » 18. Nov 2015 11:41

Die Zeile unten sollte funktionieren. Aliase müssen mit vorgehängtem "/" angegeben werden (wie bei regulärem Gebrauch auch).
Andere Pfade und Abkürzungen wie z.B. Umgebungsvariablen, die man auch direkt in die Pfadleiste eingeben kann, sollten auch aufgelöst werden.

Code: Alles auswählen

var FILENAME= DOpus.FSUtil.Resolve("/dopusdata") + "\\Suchliste.txt";
Ob loose Dateien unter "/dopusdata" bei einem Backup der Konfiguration mitgenommen werden, weiß ich aber gerade nicht.
Falls das wichtig oder praktisch wäre, die Datei unter "/dopusdata/scripts" ablegen, das wird auf jeden Fall mitgesichert.

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Suchen mit Hilfe von Liste/Dropdown

Beitrag von Kundal » 18. Nov 2015 20:28

Diese etwas vereinfachte Variante sollte für den empfohlenen Speicherort /dopusdata\Scripts\Suchliste.txt ebenfalls funktionieren. Das Auftrennen des Pfades mit + ist also unnötig:

Code: Alles auswählen

var FILENAME= DOpus.FSUtil.resolve("/dopusdata\\Scripts\\Suchliste.txt");
Deinem ersten Ansatz fehlte im Wesentlichen nur ein Punkt zwischen DOpus und aliases und das & muss in jscript ein + sein. Der Slash vor dopusdata ist bei Verwendung von DOpus.aliases nicht zu setzen:

Code: Alles auswählen

var FILENAME= DOpus.aliases("dopusdata").path + "\\Scripts\\Suchliste.txt";

josinoro
Beiträge: 166
Registriert: 4. Aug 2013 19:58
Version DOpus: Pro

Re: Suchen mit Hilfe von Liste/Dropdown

Beitrag von josinoro » 19. Nov 2015 01:06

Hallo tbone,
hallo Kundal,

vielen Dank für eure Hilfe. Beide Varianten funktionieren einwandfrei. In meiner Variante waren im Wesentlichen ja nur 3 Fehler in einer Zeile. :?

Kann ich jemanden dazu bewegen das Script dahingehend zu erweitern, dass die Suchpfade ebenfalls aus einer externen Textdatei einlesbar sind, so dass keinerlei Konfiguration, außer den beiden Dateinamen, mehr im Quellcode erforderlich ist?

MfG

josinoro

Benutzeravatar
tbone
Berater
Beiträge: 394
Registriert: 22. Nov 2014 21:16
Betriebssystem: 7*64
Produkt: aktuelle Beta-Version
Version DOpus: Pro

Re: Suchen mit Hilfe von Liste/Dropdown

Beitrag von tbone » 19. Nov 2015 01:58

Hier auf die Schnelle und nicht auf Funktion geprüft, die Chancen sind aber relativ hoch, dass es läuft.. o)

Code: Alles auswählen

@script jscript
var FILENAME  = "D:\\liste.txt";
var LOCATIONS = "D:\\locations.txt";
    
///////////////////////////////////////////////////////////////////////////////
function OnClick(data){
    var searchme = new Dropdown().
                    Load(FILENAME).
                    Show("Suchbegriff auswählen", "Video-Suche");
    if (!searchme) return;
    DOpus.Output("Auswahl: " + searchme);
    var cmd = data.func.command; cmdline = "";
    cmdline += 'Find IN "'+FileToArray(LOCATIONS).join('" "')+'" NAME "'+searchme+'" '
    cmdline += 'CLEAR RECURSE SHOWRESULTS=tab COLLNAME "VideoSuche"';
    cmd.RunCommand(cmdline);
}
///////////////////////////////////////////////////////////////////////////////
function Dropdown(){
    this.filepath   = "";
    this.vector     = DOpus.Create.Vector();
    this.win        = null;
    ///////////////////////////////////////////////////////////////////////////
    this.FileToVector = function(filepath){
        var fso     = new ActiveXObject("Scripting.FileSystemObject");
        var file    = fso.OpenTextFile(filepath);
        var v       = DOpus.Create.Vector();
        while (!file.AtEndOfStream) v.push_back(file.ReadLine());
        file.Close();
        return v;
    }
    ///////////////////////////////////////////////////////////////////////////
    this.CreateDialog = function(vector, text, title, sort){
        var dlg         = DOpus.Dlg;
        dlg.window      = (this.win?this.win:null);
        dlg.title       = title || "";
        dlg.message     = text || "Select:";
        dlg.buttons     = "Ok|Cancel";
        dlg.icon        = "question";
        dlg.choices     = vector;
        dlg.sort        = sort || true;
        return dlg;
    }
    ///////////////////////////////////////////////////////////////////////////
    this.Show = function(text, title, sort){
        var dlg = this.CreateDialog(this.vector, text, title, sort);
        var result = dlg.Show();
        if (!result) return false;
        if (dlg.selection==-1) return "";
        return dlg.choices(dlg.selection);
    }
    ///////////////////////////////////////////////////////////////////////////
    this.Load = function(filepath){
        this.filepath = filepath;
        this.vector = this.FileToVector(filepath);
        return this;
    }
}
///////////////////////////////////////////////////////////////////////////////
function FileToArray (filepath){
    var fso     = new ActiveXObject("Scripting.FileSystemObject");
    var file    = fso.OpenTextFile(filepath);
    var a       = [];
    while (!file.AtEndOfStream) a[a.length] = file.ReadLine();
    file.Close();
    return a;
}

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Suchen mit Hilfe von Liste/Dropdown

Beitrag von Kundal » 19. Nov 2015 09:19

Hi tbone, dein Script funktioniert hier einwandfrei. Ich habe nach Zeile 40 noch die folgende Zeile eingefügt, um im Dialog-Dropdown automatisch den ersten Eintrag auszuwählen:

Code: Alles auswählen

dlg.selection	= 0

josinoro
Beiträge: 166
Registriert: 4. Aug 2013 19:58
Version DOpus: Pro

Re: Suchen mit Hilfe von Liste/Dropdown

Beitrag von josinoro » 19. Nov 2015 10:12

Hallo tbone,
hallo Kundal,

vielen Dank für eure Arbeit.

Das Script funktioniert so, wie ich es mir gewünscht habe. Es tritt allerdings ein Problem bei Dateipfaden mit Umlauten ein, die nicht abgearbeitet werden.

MfG

josinoro

Benutzeravatar
tbone
Berater
Beiträge: 394
Registriert: 22. Nov 2014 21:16
Betriebssystem: 7*64
Produkt: aktuelle Beta-Version
Version DOpus: Pro

Re: Suchen mit Hilfe von Liste/Dropdown

Beitrag von tbone » 19. Nov 2015 10:18

Speicher die Datei(en) mit Notepad und in der Unicode-Kodierungen neu ab, vermutlich sind Deine Files ANSI kodiert und die Umlaute werden nicht richtig dekodiert beim Einlesen durch das Script.

josinoro
Beiträge: 166
Registriert: 4. Aug 2013 19:58
Version DOpus: Pro

Re: Suchen mit Hilfe von Liste/Dropdown

Beitrag von josinoro » 19. Nov 2015 10:46

Hallo tbone,

die Kodierung in Notepad++ lautet UTF-8.

Zwei Einträge sind in der Liste der Suchorte:

E:\__eBooks-Videos-Hörbücher
E:\MultiMedia


Es wird nur der Ordner ohne Umlaute abgearbeitet, egal in welcher Reihenfolge dieser in der Liste steht. Ich habe etliche andere Kodierungen ausprobiert, die jedoch alle nicht zum Ziel führen. Ändere ich die Umlaute in den Ordnernamen in oe und ue, funktioniert das Script einwandfrei.

MfG

josinoro

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Suchen mit Hilfe von Liste/Dropdown

Beitrag von Kundal » 19. Nov 2015 11:02

Mit UTF-8 geht's bei mir auch nicht. Es funktioniert aber mit Windows 1252.

josinoro
Beiträge: 166
Registriert: 4. Aug 2013 19:58
Version DOpus: Pro

Re: Suchen mit Hilfe von Liste/Dropdown

Beitrag von josinoro » 19. Nov 2015 11:23

Hallo Kundal,

vielen Dank, mit der Kodierung Windows 1252 funktioniert es jetzt auch bei mir.
Das werde ich gleich einmal bei mir im Script als Kommentar vermerken.

MfG

josinoro
Zuletzt geändert von josinoro am 19. Nov 2015 11:44, insgesamt 1-mal geändert.

Benutzeravatar
tbone
Berater
Beiträge: 394
Registriert: 22. Nov 2014 21:16
Betriebssystem: 7*64
Produkt: aktuelle Beta-Version
Version DOpus: Pro

Re: Suchen mit Hilfe von Liste/Dropdown

Beitrag von tbone » 19. Nov 2015 11:42

Ja, alles murks, der WSH-Default ist immernoch ANSI und nicht Unicode. Hier nochmal mit Festlegung auf Unicode, das passt dann für alle Fälle. Die Files müssen also in Unicode vorliegen (meint UTF-16 LE, und *nicht* UTF-8 - letzteres wird vom Scripting nicht gut unterstützt).

Code: Alles auswählen

@script jscript

//files must have UTF-16-LE encoding
var FILENAME  = "D:\\liste.txt";
var LOCATIONS = "D:\\locations.txt";

///////////////////////////////////////////////////////////////////////////////
function OnClick(data){
    var searchme = new Dropdown().
                    Load(FILENAME).
                    Show("Suchbegriff auswählen", "Video-Suche");
    if (!searchme) return;
    DOpus.Output("Auswahl: " + searchme);
    var cmd = data.func.command; cmdline = "";
    cmdline += 'Find IN "'+FileToArray(LOCATIONS).join('" "')+'" NAME "'+searchme+'" '
    cmdline += 'CLEAR RECURSE SHOWRESULTS=tab COLLNAME "VideoSuche"';
    cmd.RunCommand(cmdline);
}
///////////////////////////////////////////////////////////////////////////////
function Dropdown(){
    this.filepath   = "";
    this.vector     = DOpus.Create.Vector();
    this.win        = null;
    ///////////////////////////////////////////////////////////////////////////
    this.FileToVector = function(filepath){
        var fso     = new ActiveXObject("Scripting.FileSystemObject");
        var file    = fso.OpenTextFile(filepath, 1, true, -1);
        var v       = DOpus.Create.Vector();
        while (!file.AtEndOfStream) v.push_back(file.ReadLine());
        file.Close();
        return v;
    }
    ///////////////////////////////////////////////////////////////////////////
    this.CreateDialog = function(vector, text, title, sort){
        var dlg         = DOpus.Dlg;
        dlg.window      = (this.win?this.win:null);
        dlg.title       = title || "";
        dlg.message     = text || "Select:";
        dlg.buttons     = "Ok|Cancel";
        dlg.icon        = "question";
        dlg.choices     = vector;
        dlg.sort        = sort || true;
		dlg.selection   = 0;
        return dlg;
    }
    ///////////////////////////////////////////////////////////////////////////
    this.Show = function(text, title, sort){
        var dlg = this.CreateDialog(this.vector, text, title, sort);
        var result = dlg.Show();
        if (!result) return false;
        if (dlg.selection==-1) return "";
        return dlg.choices(dlg.selection);
    }
    ///////////////////////////////////////////////////////////////////////////
    this.Load = function(filepath){
        this.filepath = filepath;
        this.vector = this.FileToVector(filepath);
        return this;
    }
}
///////////////////////////////////////////////////////////////////////////////
function FileToArray (filepath){
    var fso     = new ActiveXObject("Scripting.FileSystemObject");
    var file    = fso.OpenTextFile(filepath, 1, true, -1);
    var a       = [];
    while (!file.AtEndOfStream) a[a.length] = file.ReadLine();
    file.Close();
    return a;
}

josinoro
Beiträge: 166
Registriert: 4. Aug 2013 19:58
Version DOpus: Pro

Re: Suchen mit Hilfe von Liste/Dropdown

Beitrag von josinoro » 19. Nov 2015 12:03

Hallo tbone,

nun weiss ich nicht, wie ich die Kodierung in Notepad++ auf UTF-16 LE einstellen kann.
Beim Ausprobieren bin ich mit der Kodierung UCS-2 Big Endian zum richtigen Ergebnis gekommen.

MfG

josinoro

Benutzeravatar
tbone
Berater
Beiträge: 394
Registriert: 22. Nov 2014 21:16
Betriebssystem: 7*64
Produkt: aktuelle Beta-Version
Version DOpus: Pro

Re: Suchen mit Hilfe von Liste/Dropdown

Beitrag von tbone » 19. Nov 2015 12:48

Notfalls den einfachen originalen Notepad nehmen, da gibt es "Unicode" und das bedeutet im Regelfall UTF16-LE unter Windows wenn weiter nichts dabeisteht an Nummern und ähnlichem. Dass es mit UTF16 BE, also BigEndian funktionieren soll, verwundert mich ehrlich gesagt.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste