Erstes Skript: Dateien nach Suchwort in Textdatei, verschieben

Hilfe zu verschiedenen Themen

Version: 13.2 (09.02.2024) / Version: 12.33 (16.09.2023)
Änderungen für beide Versionen
GPSoftware Forum
Antworten
Benutzeravatar
Maui
Beiträge: 50
Registriert: 3. Dez 2021 08:08
Betriebssystem: Windows 10 Pro
DOpus Version: 13

Erstes Skript: Dateien nach Suchwort in Textdatei, verschieben

Beitrag von Maui »

Hallo,
das ist mein erstes DO Skript welches Textdateien im Inhalt nach einem Suchwort sucht und die Datei verschiebt.
Das Skript habe ich auf einen Button gelegt und das JavaScript unter Skriptcode eingegeben. Der Skripttyp ist JScript.
Nachdem drücke des Buttons sollte sich ein Fenster öffnen in dem man ein Suchwort eingibt.
Dann sollten im linken Lister alle Dateiinhalte der Dateien nach dem Suchwort gesucht werden.
Dateien bei denen das Suchwort enthalten ist, soll die Datei in den rechten Lister verschoben werden.
Ist das Suchwort nicht enthalten, verbleibt die Datei im linken Lister.

Der Code ist

Code: Alles auswählen

Function OnClick(clickDaten) {
    var cmd = clickDaten.func.command;
    cmd.deselect = false;

    // Eingabefenster anzeigen, um ein Suchwort einzugeben
    var suchwort = DOpus.Dlg.Input("Suchwort eingeben", "Gebe das Suchwort ein:", "");

    if (suchwort != null && suchwort != "") {
        var dateiListe = clickDaten.func.sourcetab.left_files; // Quelldateien im linken Lister verwenden
        var zielVerzeichnis = clickDaten.func.desttab.path; // Zieldateien im rechten Lister verschieben

        for (var i = 0; i < dateiListe.count; i++) {
            var datei = dateiListe(i);
            var dateiInhalt = DOpus.ReadTextFile(datei);

            if (dateiInhalt.indexOf(suchwort) !== -1) {
                DOpus.Output("Datei '" + datei.name + "' enthält den Text: " + suchwort);
                
                // Verschiebe die gefundene Datei ins Zielverzeichnis (rechter Lister)
                DOpus.FSUtil.Move(datei, zielVerzeichnis);
            }
        }
    }
}
Ich erhalte folgende Fehlermeldung:

Code: Alles auswählen

 11.01.2024 10:53  Fehler in Zeile 1, Position 10
 11.01.2024 10:53  Function OnClick(clickDaten) {
 11.01.2024 10:53           ^
 11.01.2024 10:53  ';' erwartet (0x800a03ec)
 11.01.2024 10:53  Parsefehler - Skript abgebrochen
Über Hilfe würde ich mich sehr freuen.
Vielen Dank
Zuletzt geändert von Maui am 11. Jan 2024 11:12, insgesamt 1-mal geändert.
Benutzeravatar
tbone
Supporter
Beiträge: 174
Registriert: 29. Okt 2021 00:45
Betriebssystem: Windows 10 Pro

Re: Erstes Skript: Dateien nach Suchwort in Textdatei, verschieben

Beitrag von tbone »

"function" mal "kleinschreiben" und nomma probieren..
Benutzeravatar
Maui
Beiträge: 50
Registriert: 3. Dez 2021 08:08
Betriebssystem: Windows 10 Pro
DOpus Version: 13

Re: Erstes Skript: Dateien nach Suchwort in Textdatei, verschieben

Beitrag von Maui »

Es gibt diesmal keine Fehlermeldung.
Aber es öffnet sich auch nicht das Eingabefenster um das Suchwort ein zu geben?

Es passiert einfach nichts. Weder im Lister, noch n der Skriptausgabe?
Benutzeravatar
tbone
Supporter
Beiträge: 174
Registriert: 29. Okt 2021 00:45
Betriebssystem: Windows 10 Pro

Re: Erstes Skript: Dateien nach Suchwort in Textdatei, verschieben

Beitrag von tbone »

Wo hast Du diese Zeile her?

Code: Alles auswählen

var suchwort = DOpus.Dlg.Input("Suchwort eingeben", "Gebe das Suchwort ein:", "");
Für das DOpus.Dlg Objekt ist keine Methode "Input()" definiert, siehe Referenz:
https://docs.dopus.com/doku.php?id=refe ... cts:dialog

Wie findet man heraus, wo der Code bereits komisch funktioniert?
Immer selber erstmal mit einfachen Debug-Ausgaben gucken, läuft der Code die entsprechende Stelle überhaupt an?

Code: Alles auswählen

DOpus.Output("debug 01");
Mehrere davon einbauen, oder eine Zeile davon immer weiter verschieben und wieder ausführen.
So bin ich schnell darauf gekommen, dass DO Deine "Input()" Variante gar nicht unterstützt wird.
Unter Umständen hast Du da irgendwas halb-internes angefasst, dass nicht direkt zu einer Exception führt (ja hast Du).

Das hier z.B. wirft eine Exception, weil Input0815DoesNotExist() als Methode gar nicht existiert.

Code: Alles auswählen

var suchwort = DOpus.Dlg.Input0815DoesNotExist("Suchwort eingeben");
Bei Dir passiert das nicht, weil es zwar keine Methode "Input()" gibt, aber ein Property "input".
DO nimmt es hier mit der Klein/Großschreibung leider nicht so genau und auch ist aus der Script-Umgebung heraus schwer feststellbar, ob das jetzt ein Property ist oder eine Funktion (das liegt aber eher an DOs Implementierung).

Anderes Beispiel, "eineVariable" hier mal als Property anzusehen, kannst Du normalerweise nicht einfach durch Anhängen von "()" ausführen:

Code: Alles auswählen

var eineVariable = "hat text";
eineVariable();
Das gibt den Fehler: "Function expected (0x800a138a)".
Wenn Du diesen Fehler auf einem DO Objekt machst, passiert das nicht, weil so ein Property wie "input" auch irgendwie als Methode implementiert ist, so war zumindest damals die Ausrede / Erklärung von den Entwicklern.

Ich hoffe das hilft weiter?!.. o)

ps: Der Deutsch Professor rief noch rüber:
Der Imperativ der "Du-Form" (2. Person Singular) von "geben" ist "gib".
Also -> "Gib das Suchwort ein:" anstatt "Gebe das Suchwort ein:".
Benutzeravatar
tbone
Supporter
Beiträge: 174
Registriert: 29. Okt 2021 00:45
Betriebssystem: Windows 10 Pro

Re: Erstes Skript: Dateien nach Suchwort in Textdatei, verschieben

Beitrag von tbone »

Noch ein Tip für einfacheres Coding:

Versuch' Dein Script / Programm immer so aufzubauen, dass es konkrete Schritte macht, die einzeln wieder aufrufbar und auch erweiterbar sind.
Also anstatt einer All-In-One Methode wie hier:

Code: Alles auswählen

for(20mal) {
	var fileA = getFile();
	if (xyz) {
		doXwithFile( fileA );
	}
	doYwithFile( fileA );
	if (abc) {
		if (def) {
			doZwithFile( fileA )
		}
	}
}
Machst Du konkrete Schritte nach dem ETL Prinzip (Daten Extract, dann Transform, dann Load = ETL).

Code: Alles auswählen

	var filesAll = getAllFiles();
	var filesFiltered = filterFilesBySearch( filesAll, searchString );
	var filesFiltered = doYWithFiles( filesFiltered, xyz );
	var filesFiltered = doZWithFiles( filesFiltered, abc );
	var filesMoved = moveFiles( filesFiltered, target );
Was genau nun "Extract", "Transform" und "Load" machen, kommt auf Dein Programm an. Diese Begriffe sind nur Platzhalter, es geht im Prinzip auch nur darum, dass Du während des Programms und der Verarbeitung, immer einen ähnlichen "Block" an Daten benutzt (also immer den gleichen Datentyp), bei Dir z.B. eine "Sammlung-von-Dateien". Am Anfang sind da alle Dateien des Ordners drin, im nächsten Schritt nur die, die den Suchbegriff enthalten, danach vielleicht nur die Dateien, deren Name mit "*.txt" enden usw.. Am Schluss erfolgt dann das "Load", die End-Prozessierung, in Deinem Fall das "Move()", aber auch wieder mit dem ähnlichen Block "Sammlung-von-Dateien", der Rückgabewert von Move() "filesMoved" könnte bspw. nur die erfolgreich verschobenen Dateien enthalten, wenn leer, hat offensichtlich gar nichts geklappt.

Der Ansatz der einzelnen Methoden kommt hier auch ein bisschen aus dem "functional programming", das bedeutet u.a.: In eine Methode kommt immer X rein und X-abgewandelt wieder hinaus, es kommt niemals plötzlich Y oder Z raus (also keine andere Typen). Nochmal anders ausgedrückt: Also immer "Sammlung-von-Dateien" rein und auch raus (auch eine leere Sammlung die zurückgegeben wird, wäre ok). Somit hast Du immer die gleiche Schnittstelle in Deinem Code bzw. den Methoden (Schnittstelle zu verstehen als: Was geht in die Methode rein und was kommt wieder raus).

Diese Vorgehensweise ist "best practice", weil Methoden die manchmal ein Array, dann wieder NULL und unter Umständen auch einen "String" zurückgeben, die sind die Hölle beim Entwickeln. Du weißt nicht, womit Du es im nächsten Schritt zu tun hast. Ist jetzt ein Array zurückgekommen oder nicht? Wenn klar ist, dass immer ein Array zurückkommt, auch ein leeres oder eines mit Sub-Arrays, kannst Du aber sicher sein, dass Du myArray.length benutzen kannst. Es wird keine Exception geben, nur weil bspw. keine Dateien gefunden wurden und Du NULL zurückgibst. Nein man gibt dann das leere Array zurück, einfach damit die Methoden-Schnittstelle erhalten bleibt und der Rückgabewert keine Sonderbehandlung braucht (ist Array? dann X, falls nicht, dann Y usw..).

Falls Dir ein Array als Input/Output für die Methoden wie im Beispiel zu wenig ist, weil Du vielleicht wissen willst, was genau nun schiefgelaufen ist beim "moveFiles()", dann erfindet man eben ein neues Objekt, welches das Array mit den Files und auch immer einen Status und eine Error-Beschreibung hat und nimmt dieses dann um es durch die Methoden zu schleusen. Kommt es zu einem Fehler ist irgendwo "returnedObject.succes == false" und "returnedObject.errorMsg == Access Denied", aber "returnedObject.files.length" ist nach wie vor verfügbar.

Ich denke man sieht hier in dem einfachen Beispiel sofort, wieviel aufgeräumter und verständlicher der Programmablauf ist.
Na das hoffe ich zumindest. o)
Benutzeravatar
Maui
Beiträge: 50
Registriert: 3. Dez 2021 08:08
Betriebssystem: Windows 10 Pro
DOpus Version: 13

Re: Erstes Skript: Dateien nach Suchwort in Textdatei, verschieben

Beitrag von Maui »

Danke für die Antwort.
JavaScript ist für mich neu und Java programmiere ich schon länger und da kann eventuell mal was reinrutschen ;)
Benutzeravatar
tbone
Supporter
Beiträge: 174
Registriert: 29. Okt 2021 00:45
Betriebssystem: Windows 10 Pro

Re: Erstes Skript: Dateien nach Suchwort in Textdatei, verschieben

Beitrag von tbone »

Sag' doch mal, wie bist Du denn nun auf diese Zeile gekommen?

Code: Alles auswählen

var suchwort = DOpus.Dlg.Input("Suchwort eingeben", "Gebe das Suchwort ein:", "");
Ich glaube Du hast letztens schonmal so eine Zeile "rausgehauen"! o)
Wo ich dann die Referenz verlinkte, weil es das Objekt oder ähnlich gar nicht gab.

Das ist dann kein Javascript spezifischer Fehler, sondern irgendwas in Deinem WieProgrammierIchDas?-Ablauf.
Irgendwas was Dir bspw. auch in Java passieren kann - so sieht das für mich zumindest aus.
Benutzeravatar
Maui
Beiträge: 50
Registriert: 3. Dez 2021 08:08
Betriebssystem: Windows 10 Pro
DOpus Version: 13

Re: Erstes Skript: Dateien nach Suchwort in Textdatei, verschieben

Beitrag von Maui »

Mit neuen Programmiersprachen tue ich mich aktuell wirklich schwer.
JavaScript ist neu für mich und da brauche ich mittlerweile sehr viel länger um es zu erlernen.
Seit dem Schlaganfall im letzten Jahr funktioniert mein Gedächtnis leider nicht mehr so gut wie vorher, bin aber froh nicht Querschnittsgelähmt zu sein. Alles dauert jetzt viel länger, vergesse relativ schnell und als ich nach einem Jahr mein selbst geschriebenen Java-Code wieder gelesen hatte hab ich mich manchmal gefragt, was hab ich da nur geschrieben. Also ein Zustand den ich nicht wirklich prickelnd finde, versuche aber das beste daraus zu machen. Mein eigener Java-Code kommt mir mittlerweile auch wieder vertrauter vor.

Ich habe auch gerade erst gemerkt, das der Beispielcode für Fenster auf der DO Seite VB-Script ist und ich hatte es in JScript integriert und Fragte mich warum das nicht klappt. Mittlerweile habe ich verstanden das ich unter Skriptcode den Skripttyp VBScript deklarieren muss damit die Beispiele laufen und es kein JacaScript ist.

Die DO Befehle die in VB Code deklariert sind. funktionieren die auch in JavaScript?
Ich würde nur sehr ungern VB-Script lernen, da ich Java kenne und fühle mich mit JavaScript wohler.

Ich bin auch nicht glücklich, das ich mit dem kleinen Skript solche Probleme habe.

Vielen Dank für den Hinweis auch in JavaScript Methoden/Funktionen zu schreiben um Coder wieder zu verwenden. Das mache ich in der Regel immer, habe in Java mittlerweile viele hunderte geschrieben und ist mir nicht neu. Jedoch wollte ich mit meinen ersten Skript Versuchen Ermstal auf sowas verzichten und was schreiben was schon mal funktioniert. Bei so kleinen Skripten wollte ich erstmal sehen wie dinge Funktionieren wie das eingeben eines Suchwortes über ein Fenster, sowie das einlesen einer Dateiliste und das durchsuchen des Textinhaltes als auch das verschieben in einen anderen Lister. Wenn so ein kleines Skript funktionier und ich es verstanden habe mach ich dann oft die Optimierte Version davon. Aber wie schon gesagt Skriptprogrammierung mit DO und auch JavaScript ist neue für mich, ich muss erstmal verstehen wie das funktioniert.

Danke für den Tipp das Funktionen immer den gleichen Typ zurückgeben denen sie auch erhalten haben. Das habe ich in der Vergangenheit nicht so behandelt aber ich werde mir das Prinzip in meinem Java-Projekt mal genauer durchdenken.


Viele Grüße
Benutzeravatar
tbone
Supporter
Beiträge: 174
Registriert: 29. Okt 2021 00:45
Betriebssystem: Windows 10 Pro

Re: Erstes Skript: Dateien nach Suchwort in Textdatei, verschieben

Beitrag von tbone »

Ok, dann mach' bitte weiter mit dem Coden, das ist sicher gutes Gehirnjogging!
Die DO Befehle die in VB Code deklariert sind. funktionieren die auch in JavaScript?
Prinzipiell würde ich sagen "ja", die Syntax ringsum ist stellenweise sehr anders, aber ansich kann man in VBScript praktisch nichts aufrufen, was nicht auch unter JScript aufrufbar ist, von daher muss sich ein VBScript zu 99.99% in JScript umschreiben lassen. Es gibt nur ungefähr 2 Funktionen "MsgBox" und "Input" oder so, die in JScript nicht verfügbar sind, die braucht man aber in der DO Umgebung nicht, da hat man DO nativen Ersatz.

Ja, die "Extended" Infos die ich zum Coden schrieb', die muss man nicht sofort umsetzen, aber kann man mal so im Hinterkopf behalten.
Die meisten Scripte die gepostet werden (selbst von Leo z.B.), sind komischerweise immer solche Einrückungs-Exzesse mit FOR in IF in IF usw.. Ich kenne professionelle Kollegen die verdienen auch damit Geld, aber in vielen sehr professionellen Quelltexten, sieht man sowas so gut wie gar nicht.

Wenn in einer Methode mehr als 2 Einrückungen sind, wird es nach den "Clean Code" Regeln auch schon etwas "schwierig", die kann man sich auch mal durchlesen und durchdenken, dümmer macht einen das nicht. Oft braucht man auch gar nicht so viele Einrückungen, wenn man Blöcke und Schleifen z.B. immer früh verlässt (alle abnormen Bedingungen vorne prüfen und gleich "raus"), der Rest der Methode ist der Ablauf für den Normalfall, der dann kaum noch IF, THEN, ELSE benötigt.

Auch kann man einer Variable immer schonmal einen Wert geben und dann nur mit einem einzigen IF den ELSE-Zweig abhandeln.

Code: Alles auswählen

var myVar = true;
if (abc) myVar = false;
anstatt ..

Code: Alles auswählen

if (abc)
	myVar = false
else
	myVar = true
Ok, ich schweife schonwieder ab! o)
Bis denne und bleib' dran! o)
Benutzeravatar
Maui
Beiträge: 50
Registriert: 3. Dez 2021 08:08
Betriebssystem: Windows 10 Pro
DOpus Version: 13

Re: Erstes Skript: Dateien nach Suchwort in Textdatei, verschieben

Beitrag von Maui »

Ich habe jetzt einen Funktionsfähigen Code der das mach was ich wollte. Ist zwar nicht schön und komfortabel aber geht erstmal.
Leider musste ich das Suchwort in den Quellcode implementieren weil ich das mit dem Fenster einfach nicht hin bekommen habe.
Auch habe ich es nicht geschafft mit FSUtil.OpenFile den Textinhalt aus der Datei zu lesen und habe dafür eine eigene Funktion geschrieben
Einen Befehl zum verschieben der Datei habe ich in DO auch nicht gefunden daher die eigene Funktion

Wenn du mir die Zeilen für das Fenster schreiben könntest würde ich mich sehr freuen.

Vielen Dank

Code: Alles auswählen

function OnClick(clickData) {
    var cmd = clickData.func.command;
	
	// Verhindert die automatische Aufhebung der Auswahl
    cmd.deselect = false; 

	/*
	var Dialog = DOpus.Dlg;
    Dialog.window = clickData.func.sourcetab;
    Dialog.template = "Eingabe des Suchwortes";
	Dialog.show; // Ungültiger Prozeduraufruf oder ungültiges Argument (0x800a0005)
	// Das wäre nur das Fenster selber, es müsste eine XML eingebunden werden.
	// Ähnlich wie bei JavaFX mit den FXML Dateien.
	// Müsste doch auch ohne XML gehen?

	/****
	  Hier das Suchwort über ein Fenster einfügen
	*** */

	// Suchwort für den Textinhalt
    var suchwort = "Dateien"; 

    if (suchwort != null && suchwort != "") {
        var zielVerzeichnis = clickData.func.desttab.path;

		// Ausgewählte Dateien im linken Lister
        var dateiListe = clickData.func.sourcetab.selected_files; 

		// Zählvariable für gefundene Dateien
        var gefunden = 0; 

        if (dateiListe.count > 0) {
            DOpus.Output("Anzahl der ausgewählten Elemente: " + dateiListe.count);

            for (var i = 0; i < dateiListe.count; i++) {
				DOpus.Output("Name der Datei mit Pfad: " + dateiListe(i));
				
                var datei = dateiListe(i);
                var dateiPfad = datei.realpath;

				// Mit diesem Befehl wird das suchwort nicht gefunden, scheinbar wird kein Textinhalt entnommen?	
				// var dateiInhalt = DOpus.FSUtil.OpenFile(dateiPfad);
				
                // Dateiinhalt mit JavaScript lesen und nach dem Suchwort suchen
				var dateiInhalt = LeseDateiInhalt(dateiPfad);
                if (dateiInhalt.indexOf(suchwort) !== -1) {
                    DOpus.Output("Name der Datei: " + datei.name);
                    DOpus.Output("Datei '" + datei.name + "' enthält das Suchwort: " + suchwort);

				   	DOpus.Output("Quelldatei: " + datei);
					DOpus.Output("Zieldatei: " + zielVerzeichnis+"\\"+datei.name);
					
					verschiebeDatei(datei, zielVerzeichnis+"\\"+datei.name);
                    gefunden++; // Inkrementiere die Zählvariable
                }
            }
        } else {
            DOpus.Output("Keine ausgewählten Dateien im linken Lister.");
        }
        DOpus.Output("Anzahl der gefundenen Dateien: " + gefunden); 
    } else {
        DOpus.Output("Kein Suchwort eingegeben.");
    }
}

function LeseDateiInhalt(dateiMitPfad) {
    var fs = new ActiveXObject("Scripting.FileSystemObject");
    var file = fs.OpenTextFile(dateiMitPfad, 1, false);
    var dateiInhalt = file.ReadAll();
    file.Close();
    return dateiInhalt;
}

function verschiebeDatei(quelldatei, zieldatei) {
    var fso = new ActiveXObject("Scripting.FileSystemObject");

    if (fso.FileExists(quelldatei)) {
        fso.MoveFile(quelldatei, zieldatei);
        return true;
    } else {
        return false;
    }
}
Benutzeravatar
tbone
Supporter
Beiträge: 174
Registriert: 29. Okt 2021 00:45
Betriebssystem: Windows 10 Pro

Re: Erstes Skript: Dateien nach Suchwort in Textdatei, verschieben

Beitrag von tbone »

In die Referenz geguckt, unter "Methods und GetString() gefunden:
https://docs.dopus.com/doku.php?id=refe ... cts:dialog

Ein einfacher Aufruf sieht so aus:

Code: Alles auswählen

DOpus.Output( DOpus.Dlg.GetString("Message", "default value", 256, "Ok", "Title"));
Ich sehe functions() sehr gut! o)
Benutzeravatar
Maui
Beiträge: 50
Registriert: 3. Dez 2021 08:08
Betriebssystem: Windows 10 Pro
DOpus Version: 13

Re: Erstes Skript: Dateien nach Suchwort in Textdatei, verschieben

Beitrag von Maui »

Vielen Dank, diese Referenzseite hatte ich auch auf aber auf GetString bin ich nicht draufgekommen.
Das Fenster hat funktioniert und wenn ich etwas eingebe und OK drücke wird in der Skriptausgabe auch die Eingabe angezeigt.
Allerding konnte ich in der Referenz nicht erkennen wie ich auf die Eingabe in meinem Code drauf zugreifen kann?
Ich hatte mit DOpus.Output( DOpus.Dlg.GetString.result); versucht, da es ja nur eine Eingabezeile ist dachte ich das man das Ergebnis
als result abrufen kann?

Kannst du mir sagen ob man mit "var dateiInhalt = DOpus.FSUtil.OpenFile(dateiPfad);" den inhalt einer Textdatei auslesen kann?

Vielen Dank
Benutzeravatar
tbone
Supporter
Beiträge: 174
Registriert: 29. Okt 2021 00:45
Betriebssystem: Windows 10 Pro

Re: Erstes Skript: Dateien nach Suchwort in Textdatei, verschieben

Beitrag von tbone »

Das Fenster hat funktioniert und wenn ich etwas eingebe und OK drücke wird in der Skriptausgabe auch die Eingabe angezeigt.
Allerding konnte ich in der Referenz nicht erkennen wie ich auf die Eingabe in meinem Code drauf zugreifen kann?
Der eingebene String wird (in meinen Beispiel) doch direkt in der Konsole ausgegeben.. statt ausgeben, den Wert einfach in eine Variable "tun".
Kannst du mir sagen ob man mit "var dateiInhalt = DOpus.FSUtil.OpenFile(dateiPfad);" den inhalt einer Textdatei auslesen kann?
Die Referenz sagt für das FSUtil Objekt, dass es ein Objekt vom Typ "File" zurückgibt.
https://docs.dopus.com/doku.php?id=refe ... D=openfile
image.png
Deine Zeile erwartet direkt den Datei-Inhalt, aber wie gesagt, OpenFile() gibt erstmal ein File Objekt zurück.

Code: Alles auswählen

var dateiInhalt = DOpus.FSUtil.OpenFile(dateiPfad);
Richtiger also so:

Code: Alles auswählen

var fileHandle = DOpus.FSUtil.OpenFile(dateiPfad); 
Jetzt hast Du ein File Objekt.. jetzt klickst Du in der Referenz auf "File" Objekt und guckst, was es dafür für Methoden gibt.
https://docs.dopus.com/doku.php?id=refe ... jects:file

Da findet man bspw. Read(), also:

Code: Alles auswählen

var fileDataBlob = fileHandle.Read(); 
Jetzt hast Du die Datei als "Blob" Objekt geladen, die Datei ist jetzt vermutlich komplett im Speicher, muss aber nicht sein, wenn das Blob Objekt selber die Stellen nachlädt, die Du ansprichst. Da muss man die Entwickler fragen, spielt hier aber vermutlich keine Rolle.

In der Referenz zum Blob Objekt findet man eine Methode Find(), mit der man einen BlobX (Dein Such-String) im geladenen Datei-Blob suchen kann:
https://docs.dopus.com/doku.php?id=refe ... jects:blob
Wir suchen nun mit einem OnTheFly erzeugten Blob mit Inhalt "search-me" im bereits vorhandenen File Blob.

Code: Alles auswählen

var fileSize = fileDataBlob.Find( DOpus.Create.Blob("search-me")  );
if (fileSize === -1) { //
	DOpus.Output("String not found");
}
Soweit die Theorie, also ja, es müsste gehen, durchprobiert habe ich das nicht! o)
Benutzeravatar
Maui
Beiträge: 50
Registriert: 3. Dez 2021 08:08
Betriebssystem: Windows 10 Pro
DOpus Version: 13

Re: Erstes Skript: Dateien nach Suchwort in Textdatei, verschieben

Beitrag von Maui »

Danke, jetzt habe ich das erst gecheckt dass die Eingabe im Fenster wird :roll:

Code: Alles auswählen

// DOpus.Output( DOpus.Dlg.GetString("Gebe ein Suchwort ein", "", 256, "Ok", "Suchwort"));
var suchwortDlg = DOpus.Dlg.GetString("Gebe ein Suchwort ein", "", 256, "Ok", "Suchwort");
Werde mich morgen an die Verbesserung des Codes mit dem Blob-Objekt machen.
Antworten