Textsuche in einer Datei - flutter-tutorial-de/dart-programming GitHub Wiki
Unser erstes Projekt ist eine einfache Textsuche in einer Datei.
Dabei lernen wir sukzessive, welche Schritte notwendig sind, um ein selbständiges Programm mit Hilfe der Entwicklungsumgebung IdeaIC zu erstellen.
- Projekt erstellen
- Dart:
- Programmargument auswerten
- Datei lesen
- Suche nach regulärem Ausdruck
- IdeaIC starten
- Menü:
File
-New
- - Linke Spalte:
Dart
- Dart-SDK:
- Windows: c:\dart-sdk
- Linux: ~/dart-sdk
- Es erscheint eine Listbox, dort
Console-Application a command-line application sample
anklicken. -
Next
-Button - Project name:
dsuche
- Project loction:
- Linux:
~/dev/dsuche
- Windows:
c:\dev\dsuche
- Linux:
-
Finish
-Button
dsuche
erstellt.
- Linke Spalte:
Projects
anklicken. - Es wird ein Ordner namens
dsuche
sichtbar. - Auf das Symbol ">" klicken, daraufhin klappt das Verzeichnis aus.
- Im Unterverzeichnis
bin
liegt die Datei mit dem Hauptprogrammdsuche.dart
. - Im Unterverzeichnis
lib
liegt eine zweite Dateidsuche.dart
, die ergänzenden Code enthält. Da wir diese Datei in diesem Projekt nicht brauchen, löschen wir diese:Rechte Maustaste
-Delete
. - Ziemlich weit unten im Verzeichnis gibt es die Datei
pubspec.yaml
. Dort werden Pakete eingetragen. In diesem Projekt brauchen wir nichts zusätzliches, daher bleibt die Datei in diesem Fall unverändert.
- Links in der Projektansicht die Datei bin\dsuche.dart anklicken.
- Nun kopieren wir folgenden Code in diese Datei:
import 'dart:io'; /// Durchsuchen einer Datei nach einem regulären Ausdruck. /// [args]: Programm-Argumente, z. B. [r'https?://', 'rechnung.txt'] void main(List<String> args) { if (args.length < 2){ print('Gebrauch: dsuche <suchmuster> <date>\nBeispiel: dsuche "https?://" rechnung.txt'); } else { final lines = File(args[1]).readAsLinesSync(); RegExp regExp = RegExp(args[0], caseSensitive: false); for (var line in lines){ if (regExp.firstMatch(line) != null){ print(line); } } } }
-
import 'dart:io';
Wir verwenden eine Bibliothek, näheres folgt im nachfolgenden Kapitel. -
void main(List<String> args)
. Hier unterscheidet sich die Funktionmain()
von früheren Beispielen:- Es wird eine Liste von Strings im Parameter
args
übergeben. - Das sind die sogenannten Programmparameter: Wird das Programm in der Eingabeaufforderung aufgerufen, kann man diesem zusätzliche Informationen mitgeben. In unserem Fall, welcher Text gesucht wird und in welcher Datei. Diese Informationen werden in den Parameter
args
übergeben.
- Es wird eine Liste von Strings im Parameter
-
args.length < 2
Wir prüfen, ob weniger als zwei Parameter angegeben wurden. Wenn ja, geben wir eine Fehlermeldung aus und das Programm ist fertig. -
final lines = File(args[1]).readAsLinesSync();
Wir benutzen die Bibliothekdart:io
zum Einlesen der Datei:-
File(args[1])
erstellt ein Objekt der KlasseFile
, das mit dem zweiten Argument spezifiziert wird. - Hinweis: das erste Argument ist args[0].
- Die Methode
readAsLinesSync()
der KlasseFile
liest den Inhalt der Datei und liefert die einzelnen Zeilen in einer Liste von Strings ab, die bei uns in der Variablenlines
gespeichert wird.
-
-
RegExp regExp = RegExp(args[0], caseSensitive: false)
Aus dem ersten Programmargumentargs[0]
erzeugen wir ein Objekt der KlasseRegExp
, mit der OptioncaseSensitive
false, d. h. Groß-/Kleinschreibung ist bei der Stringsuche egal. -
for (var line in lines)
Mit dieser Schleife verarbeiten wir Zeile für Zeile, die jeweils in der Variableline
zur Verfügung steht. -
regExp.firstMatch(line) != null
Wir prüfen, ob der Suchstring im ObjektregExpr
in der Zeileline
vorkommt: Wenn ja, wird die Zeile ausgegeben.
- Menü
Run
-Edit configuration
klicken. - Es geht eine Dialogbox auf: Oben links auf das
+
klicken. - In der Liste
Dart Command Line App
- Name:
dsuche
- Dart file: Hier auf das Ordnersymbol in dem Textfeld klicken, dort Ordner
dsuche
aufklappen, im Unterordnerbin
die Dateidsuche.dart
anklicken. - Program arguments:
- Windows:
https?:// c:\dev\links.txt
- Linux:
https?:// ~/dev/links.txt
- Windows:
- Button
Ok
- Im Entwicklungsordner (Windows: c:\dev, Linux: ~/dev/) eine Datei links.html anlegen:
Dies ist eine Testdatei Suchen geht mit https://google.com Spezialwissen findet sich auf http://wikipedia.de Hab Spaß mit Programmieren!
- Programm laufen lassen: In der oberen Toolbar gibt es einen grünen
Pfeil rechts
(grünes Dreick): Anklicken - Das Programm wird ausgeführt.
- Im unteren Bereich gibt es folgende Ausgabe:
dart dsuche.dart https?:// ... Suchen geht mit https://google.com Spezialwissen findet sich auf http://wikipedia.de Process finished with exit code 0
- Unser Programm gibt also wie gewünscht von den vier vorhandenen Zeilen in
links.txt
genau die zwei aus, die einen Link (http:// oder https://) enthalten!
- Terminal öffnen
gdev dsuche dcompile dsuche </code> Danach gibt es die Datei <code>/usr/local/bin/dsuche</code>. Dieses Programm kann in der Eingabeaufforderung gestartet werden. <pre>gdev dsuche https?:// links.txt
- Eingabeaufforderung starten
gdev dsuche
dcompile dsuche
c:\dev\bin\dsuche.exe
Dieses Programm kann in der Eingabeaufforderung gestartet werden.
gdev dsuche https?:// links.txt
Mit 16 Zeilen Dart-Code wurde ein nützliches Programm erstellt, das mit dem Windows-Programm find
konkurrieren kann. Mehr noch, es findet einen regulären Ausdruck, was viel mächtiger ist als die primitive Stringsuche von find
!
Modifiziere den Programmcode in der Weise, dass bei "gefundenen Zeilen" am Anfang die Zeilennummer vorangestellt wird. In unserem Beispiel soll also die Ausgabe wie folgt aussehen:
2: Suchen geht mit https://google.com 3: Spezialwissen findet sich auf http://wikipedia.de