Das Ergebnis von Windows Where in Dart weiterverwenden

Dart Code

In einem jüngeren Post konnten Sie sehen, wie man von Dart her einen Prozess startet.  Am Beispiel des Where Befehls innerhalb der cmd.exe von Windows haben wir ein File auf der Festplatte gesucht.

So ein Vorgehen macht aber nur Sinn, wenn man das Ergebnis weiter verwenden kann.
Im ersten Post zu diesem Thema haben wir die Ausgabe des Prozesses einfach umgeleitet und durch unseren Code in das Terminal geschrieben. Jetzt möchten wir die Informationen aber speichern. Hier der Code:

Der Code ist im Vergleich zu dem ursprünglichen Beispiel ein wenig gewachsen. 

LineSplitter


Um die Funktion LineSplitter nutzen zu können binden wir sie über die dart:convert Library ein. Mit dem Zusatz show LineSplitter , utf8 zeigen wir an, das nur diese Funktionen in unserem Code benötigt wird.
LineSplitter selbst teilt eine Zeichenkette in Linien auf. Dabei werden unterschiedliche Codes für das Ende einer Linie berücksichtigt.

transform


Hatten wir im ersten Post den Ausgabe Stream des Prozesses einfach dem Ausgabestream unseres Codes hinzugefügt, benutzen wir hier .transform(...) . Wie der Name schon vermuten lässt, wandelt die Funktion den Stream um. Wie das geschieht wird durch utf8.decoder bestimmt.
Da auf dem Stream int Werte eintreffen, werden diese durch utf8.decoder in Zeichen bzw. in eine Zeichenkette umgewandelt.
Am Schluss wird mit .toList(...) die Zeichenkette einer Listenvariable zugewiesen.

.convert(...)


Um LineSplitter verwenden zu können müssen wir mit var ls = LineSplitter() zuerst das entsprechende Objekt definieren. Das Resultat von .toList(...) ist ein Future. So warten wir mit feld2 = await feld darauf das dieses Future komplettiert wurde. Feld2 ist dabei vom Typ List<String>, das erklärt wieso wir ls.convert(...) mit feld2[0] bedienen.
feld2[0] hat als Inhalt eine Zeichenkette, die durch convert in einzelne Linien aufgeteilt wird.

In diesem Beispiel enthält das Ergebnis von Where zwei Linien. Die gesuchte Datei existiert in zwei unterschiedlichen Ordnern. .convert gibt als Ergebnis eine Liste zurück. Zum Schluss drucken wir die zwei Listeneinträge in unsere Konsole.

Schlusswort: Ich vermute es gibt elegantere Möglichkeiten, um das gleiche Ergebnis zu erreichen. Zudem ist der Code langsam, was sicherlich mit dem externen Prozess zu tun hat.

Kommentare

Beliebte Posts aus diesem Blog

Material Design in Flutter Teil 2

Dart Basic: Listen Part 1

Listen in Dart (2021): Part 1 List.filled List.empty und List.add