Bearbeiten von „Datei search engine.dart“

Zur Navigation springen Zur Suche springen

Warnung: Du bist nicht angemeldet. Deine IP-Adresse wird bei Bearbeitungen öffentlich sichtbar. Melde dich an oder erstelle ein Benutzerkonto, damit Bearbeitungen deinem Benutzernamen zugeordnet werden.

Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.

Aktuelle Version Dein Text
Zeile 185: Zeile 185:
Die Methode bereitet die Suche vor und startet sie.
Die Methode bereitet die Suche vor und startet sie.


<pre>/// Prepares the search and do it.
<pre>void search() {
void search() {
   String exitMessage;
   String exitMessage;
  if (verboseLevel >= 2) {
    print('= current directory: ${Directory.current.path}');
  }
   try {
   try {
     final pattern2 = searchOptions.word ? '\\b$pattern\\b' : pattern;
     final pattern2 = searchOptions.word ? '\\b$pattern\\b' : pattern;
     regExp = RegExp(pattern2, caseSensitive: !searchOptions.ignoreCase);
     regExp = RegExp(pattern2, caseSensitive: !searchOptions.ignoreCase);
     final regExpList = <RegExp>[];
     final regExprList = <RegExp>[];
     final paths = <String>[];
     final paths = <String>[];
     for (var item in filePatterns) {
     for (var item in filePatterns) {
       if (FileSystemEntity.isDirectorySync(item)) {
       if (FileSystemEntity.isDirectorySync(item)) {
         paths.add(item);
         paths.add(item);
         regExpList.add(null);
         regExprList.add(null);
       } else {
       } else {
         final directory = dirname(item);
         var ix = item.lastIndexOf(path.separator);
         final filePattern = basename(item);
         paths.add(ix < 0 ? null : item.substring(0, ix));
         paths.add(item.isEmpty ? '.' : directory);
         final filePattern =
         regExpList.add(filePattern.isEmpty ? null : RegExp(shellPatternToRegExp(filePattern)));
            shellPatternToRegExp(ix < 0 ? item : item.substring(ix + 1));
         regExprList.add(filePattern.isEmpty ? null : RegExp(filePattern));
       }
       }
     }
     }
     try {
     try {
       for (var ix = 0; ix < paths.length; ix++) {
       for (var ix = 0; ix < paths.length; ix++) {
         searchFilePattern(regExpList[ix], paths[ix], 0);
         searchFilePattern(regExprList[ix], paths[ix] ?? '.', 0);
       }
       }
     } on ExitException catch (exc) {
     } on ExitException catch (exc) {
Zeile 237: Zeile 240:
** <code>if (FileSystemEntity.isDirectorySync(item))</code> Test, ob die Angabe nur ein Verzeichnis ist.
** <code>if (FileSystemEntity.isDirectorySync(item))</code> Test, ob die Angabe nur ein Verzeichnis ist.
** Wenn ja, Eintrag in die Pfadliste und <code>null</code> in die Namensmusterliste (für "alle Dateien")
** Wenn ja, Eintrag in die Pfadliste und <code>null</code> in die Namensmusterliste (für "alle Dateien")
** Wenn nein, wird die Angabe in Verzeichnis <code>directory</code> und Dateinamensmuster <code>filePattern</code> zerlegt.
** Wenn nein, wird die Angabe in Pfad und Dateinamensmuster zerlegt, das Muster in einen regulären Ausdruck umgewandelt.
** In die Pfadliste wird das aktuelle Verzeichnis <code>'.'</code> eingetragen, wenn <code>directory</code> leer ist, sonst das Verzeichnis.
*** <code>ix = item.lastIndexOf(path.separator);</code> stellt die Grenze zwischen Pfad und Dateimuster fest: das letzte Auftreten des Pfadtrenners.
* <code>for (var ix = 0; ix < paths.length; ix++)</code> eine Schleife über alle Indizes der Pfadliste.
*** Keine Grenze gefunden (<code>ix < 0</code>): dann gibt es keinen Pfad, in die Pfadliste wird <code>null</code> eingetragen, sonst der vordere Teil, der mit <code>substring(0, ix)</code> ermittelt wird.
* <code>searchFilePattern(regExprList[ix], paths[ix], 0);</code> Diese Methode realisiert die eigentliche Suche.
*** <code>ix < 0 ? item : item.substring(ix + 1)</code> Pfadtrenner nicht vorhanden: der ganze String <code>item</code>, sonst der Teil nach dem Trenner: <code>item.substring(ix + 1)</code>.
* <code>for (var ix = 0; ix < paths.length; ix++)</code> eine Schleife über alle Einträge der Pfadliste
* <code>searchFilePattern(regExprList[ix], paths[ix] ?? '.', 0);</code> Diese Methode realisiert die eigentliche Suche. <code>paths[ix] ?? '.'</code> Nimmt den ix-ten Eintrag von <code>paths</code>, wenn der <code>null</code> ist, dann das aktuelle Verzeichnis, das mit '.' bezeichnet wird.
* <code>try { ... } on ExitException catch (exc)</code> Hier werden die "Schnellabbrüche" aufgefangen. Das passiert, wenn eine Bedingung der Optionen <code>--exit-lines</code> oder <code>--exit-files</code> erfüllt ist.
* <code>try { ... } on ExitException catch (exc)</code> Hier werden die "Schnellabbrüche" aufgefangen. Das passiert, wenn eine Bedingung der Optionen <code>--exit-lines</code> oder <code>--exit-files</code> erfüllt ist.
* <code>try {...} on FormatException catch (exc) {</code> Die Ausnahme wird geworfen, wenn der reguläre Ausdruck in <code>regExp = RegExp(pattern2,...)</code> inkorrekt ist. Es wird dann eine Fehlermeldung mittels der Funktion <code>usage()</code> ausgegeben.
* <code>try {...} on FormatException catch (exc) {</code> Die Ausnahme wird geworfen, wenn der reguläre Ausdruck in <code>regExp = RegExp(pattern2,...)</code> inkorrekt ist. Es wird dann eine Fehlermeldung mittels der Funktion <code>usage()</code> ausgegeben.

Bitte kopiere keine Webseiten, die nicht deine eigenen sind, benutze keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!
Du gibst uns hiermit deine Zusage, dass du den Text selbst verfasst hast, dass der Text Allgemeingut (public domain) ist, oder dass der Urheber seine Zustimmung gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weise bitte auf der Diskussionsseite darauf hin. Bitte beachte, dass alle Info-Theke-Beiträge automatisch unter der „Gemeinfreiheit“ stehen (siehe Info-Theke:Urheberrechte für Einzelheiten). Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann klicke nicht auf „Seite speichern“.

Abbrechen Bearbeitungshilfe (wird in einem neuen Fenster geöffnet)