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 352: Zeile 352:
<pre>/// Searches the files matching the [filePattern] in a [directory].
<pre>/// Searches the files matching the [filePattern] in a [directory].
/// This method is recursive on subdirectories.
/// This method is recursive on subdirectories.
/// [depth] is the nesting level of the recursive calls.
void searchFilePattern(RegExp filePattern, String directory, int depth) {
void searchFilePattern(RegExp filePattern, String directory, int depth) {
   if (verboseLevel >= 2 && depth <= 1 || verboseLevel >= 3) {
   if (verboseLevel >= 2 && depth <= 1 || verboseLevel >= 3) {
Zeile 362: Zeile 361:
     for (var file in Directory(directory).listSync()) {
     for (var file in Directory(directory).listSync()) {
       final name = file.path;
       final name = file.path;
       final node = basename(name);
       final node = path.basename(name);
       if (FileSystemEntity.isDirectorySync(name)) {
       if (FileSystemEntity.isDirectorySync(name)) {
         if (fileOptions.excludedDirs != null &&
         if (fileOptions.excludedDirs != null &&
Zeile 373: Zeile 372:
           subDirectories.add(name);
           subDirectories.add(name);
         }
         }
        continue;
       } else {
       }
        if (filePattern != null && filePattern.firstMatch(node) == null) {
      if (filePattern != null && filePattern.firstMatch(node) == null) {
          ignoredFiles++;
        ignoredFiles++;
          if (verboseLevel >= 4) {
        if (verboseLevel >= 4) {
            print('= ignoring not matching $name');
          print('= ignoring not matching $name');
          }
          continue;
         }
         }
         continue;
         if (fileOptions.excluded != null &&
      }
            fileOptions.excluded.firstMatch(node) != null) {
      if (fileOptions.excluded != null &&
          ignoredFiles++;
          fileOptions.excluded.firstMatch(node) != null) {
          if (verboseLevel >= 4) {
        ignoredFiles++;
            print('= ignoring excluded $name');
        if (verboseLevel >= 4) {
          }
          print('= ignoring excluded $name');
          continue;
         }
         }
         continue;
         if (!fileOptions.processBinaries && isBinary(name)) {
      }
          if (verboseLevel >= 4) {
      if (!fileOptions.processBinaries && isBinary(name)) {
            print('= ignoring binary $name');
        if (verboseLevel >= 4) {
          }
          print('= ignoring binary $name');
          countBinaries++;
          continue;
         }
         }
         countBinaries++;
         final safeHits = totalHitLines;
        continue;
        searchFile(name);
      }
        if (totalHitLines > safeHits) {
      final safeHits = totalHitLines;
          totalHitFiles++;
      searchFile(name);
          if (searchOptions.exitFiles != null &&
      if (totalHitLines > safeHits) {
              totalHitFiles >= searchOptions.exitFiles) {
        totalHitFiles++;
            throw ExitException('hit files: $totalHitFiles');
        if (searchOptions.exitFiles != null &&
          }
            totalHitFiles >= searchOptions.exitFiles) {
          throw ExitException('hit files: $totalHitFiles');
         }
         }
       }
       }
Zeile 423: Zeile 422:
* <code>name = file.path;</code> Das Attribut <code>path</code> liefert den vollen Namen der Datei.
* <code>name = file.path;</code> Das Attribut <code>path</code> liefert den vollen Namen der Datei.
* <code>node = path.basename(name);</code> Die Funktion <code>basename()</code> entfernt die Pfadangabe vom Dateinamen.
* <code>node = path.basename(name);</code> Die Funktion <code>basename()</code> entfernt die Pfadangabe vom Dateinamen.
* <code>if (FileSystemEntity.isDirectorySync(name))</code> Es wird geprüft, ob die Datei ein Verzeichnis ist: Wenn ja, wird untersucht, ob ein Ausschluss des Verzeichnisses mittels der Option <code>--excluded-dirs</code> definiert ist. Wenn nicht, wird der volle Dateiname an die Liste der Unterverzeichnisse angehängt: <code>subDirectories.add(name);</code> und die Schleife mit <code>continue;</code> fortgesetzt, also mit der nächsten Zeile weitergemacht.
* <code>if (FileSystemEntity.isDirectorySync(name))</code> Es wird geprüft, ob die Datei ein Verzeichnis ist: Wenn ja, wird das untersucht, ob ein Ausschluss des Verzeichnisses mittels der Option <code>--excluded-dirs</code> definiert. Wenn nicht, wird der volle Dateiname an die Liste der Untervzeichnisse angehängt: <code>subDirectories.add(name);</code>
* <code>if (filePattern != null && filePattern.firstMatch(node) == null)</code>
* <code>if (filePattern != null && filePattern.firstMatch(node) == null)</code>
** Es wird geprüft, ob ein Dateimuster vorliegt (<code>filePattern != null</code>), aber kein Treffer vorliegt: Dann kommt die Datei nicht in Frage.
** Es wird geprüft, ob ein Dateimuster vorliegt (<code>filePattern != null</code>), aber kein Treffer vorliegt: Dann kommt die Datei nicht in Frage.
Zeile 429: Zeile 428:
* <code>if (fileOptions.excluded != null && fileOptions.excluded.firstMatch(node) != null)</code>
* <code>if (fileOptions.excluded != null && fileOptions.excluded.firstMatch(node) != null)</code>
** Wenn eine Dateiauschlussoption (<code>--excluded</code> definiert ist, und das Suchmuster passt, kommt die Datei nicht in Frage, es geht mit dem nächsten Eintrag weiter (<code>continue</code>).
** Wenn eine Dateiauschlussoption (<code>--excluded</code> definiert ist, und das Suchmuster passt, kommt die Datei nicht in Frage, es geht mit dem nächsten Eintrag weiter (<code>continue</code>).
* <code>if (!fileOptions.processBinaries && isBinary(name))</code>Wenn die Option <code>--process-binary</code> nicht gesetzt ist und die Datei binär ist, geht es zum nächsten Listeneintrag (<code>continue</code>). Die Funktion <code>isBinary</code> stammt aus der [[Datei helper.dart]].
* <code>if (!fileOptions.processBinaries && isBinary(name))</code>Wenn die Option <code>--process-binary</code> nicht gesetzt ist und die Datei binär ist, geht es zum nächsten Listeneintrag (<code>continue</code>).
* <code>searchFile(name);</code> Hier findet die Suche in der Datei statt.
* <code>searchFile(name);</code> Hier findet die Suche in der Datei statt.
* <code>if (totalHitLines > safeHits)</code> Wenn sich die Zahl der Trefferzeilen geändert hat, erhöht sich die Zahl der Trefferdateien. Wenn mit der Option <code>--exit-files</code> hier eine Grenze definiert wurde und diese erreicht ist, wird ein Schnellausstieg mit dem Werfen der Ausnahme <code>ExitException</code> getätigt.
* <code>if (totalHitLines > safeHits)</code> Wenn sich die Zahl der Trefferzeilen geändert hat, erhöht sich die Zahl der Trefferdateien. Wenn mit der Option <code>--exit-files</code> hier eine Grenze definiert wurde und diese erreicht ist, wird ein Schnellausstieg mit dem Werfen der Ausnahme <code>ExitException</code> getätigt.
* <code>try { ... } on FileSystemException {</code> Beim Aufruf der Methode <code>listSync()</code> kann ein Problem auftreten, das das Werfen der Ausnahme <code>FileSystemException</code> auslöst. In diesem Fall wird die Statistik berichtigt und die Suche in diesem Verzeichnis beendet.
* <code>try { ... } on FileSystemException {</code> Beim Aufruf der Methode <code>listSync()</code> kann ein Problem auftreten, das das Werfen der Ausnahme <code>FileSystemException</code> auslöst. In diesem Fall wird die Statistik berichtigt und die Suche in diesem Verzeichnis beendet.
* <code>if (fileOptions.recursive)</code> Wenn die Option <code>--recursive</code> gesetzt ist, wird die Liste der Unterverzeichnisse in einer Schleife <code>for (var subDir in subDirectories)</code> abgearbeitet. Das geschieht durch Aufruf der Methode <code>searchFilePattern()</code>, also einem '''rekursiven Aufruf''' von "sich selber". Die Verschachtelungstiefe <code>depth</code> erhöht sich dann um <code>1</code>.
* <code>if (fileOptions.recursive)</code> Wenn die Option <code>--recursive</code> gesetzt ist, wird die Liste der Unterverzeichnisse in einer Schleife <code>for (var subDir in subDirectories)</code> abgearbeitet. Das geschieht durch Aufruf der Methode <code>searchFilePattern()</code>, also einem '''rekursiven Aufruf''' von "sich selber".


== Die Methode showLine() ==
== Die Methode showLine() ==

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)