Hallo zusammen,
ich möchte einen Script, der .csv datei liesst und Path rekursiv nach
bestimmten Endungen (.qml) durchsucht.
Das .csv Datei sieht wie folgende aus:
Import,Version number
import QtQuick,2.9
import QtQuick.XmlListModel,2.0
import QtQuick.Particles,2.0
import QtQuick.Window,2.3
import QtQuickControls,1.5
import QtQuick.Controls,2.2
import QtQuick.Dialogs,1.2
import QtQuick.Layouts,1.3
Idee wäre der Path rekursiv nach diesem Endungen (.qml) zu durchsuchen
und dann die die gefunden Datei nach diesem .csv zu durchsuchen.
Ich muss zugeben, dann ich in einen Anfänger was Python angeht.
Folgende habe ich versucht:
Ich bin mir nicht sicher, ob ich die Aufgabe richtig verstehe. Geht es
darum, in D:\TEMP und allen Unterverzeichnissen die Dateien
QtQuick.qml
QtQuick.XmlListModelqml
QtQuick.Particles.qml
etc...
zu finden?
Das ließe sich mit einfachen Shell-Bordmitteln (die gibt's auch für
Windows) lösen.
sed -ne 's/^import \([^,]*\),.*/find 'D:/TEMP' -name "\1.qml"/p' \
infile.csv \
| tee generiertes-find-script-zum-anschauen.sh \
| bash
(dritte Zeile mit tee ist optional, zum Debuggen)
Funktionsweise: Baue "import filename version" durch einfache
Textersetzung zu einem Find-Kommando um und führe es aus.
Annahme: Du bist sicher, dass im Input keine Schweinereien wie
Backticks, Dollars oder Beistriche sind. Die Methode ist nicht besonders
Security-lastig, einzig blanks im Filenamen sollte sie aushalten :-/
> ich möchte einen Script, der .csv datei liesst und Path rekursiv nach> bestimmten Endungen (.qml) durchsucht.
Du solltest erstmal Deutsch lernen.
Die Problembeschreibung ist viel zu multivalent (=mehrdeutig).
Bei diese Aufgabe geht es darum QML datei zu suchen.
Ist diese getun dann nach einen bestimmten String durchsuchen und zwar
Datei für Datei.
idee ist:(Haben alle QML File die richtige Import)
und welche "Aufgabe" hat die csv Datei im Zusammenhang zu den .qml
Dateien?
du schriebst":
"einen Script, der .csv datei liesst und Path rekursiv nach
bestimmten Endungen (.qml) durchsucht."
--> In der csv-Datei stehen also eine oder mehrere (Grund-) Pfade drin,
und am diesen Pfaden soll rekursiv nach .qml Dateien gesucht werden?
Meine Glaskugel vermutet folgendes könnet gemeint sein:
suchdatei.csv:
c:\temp\
d:\daten\hugo\
--> alle Dateien c:\temp\*.qml sowie weitere *.qml in allen
Unterverzeichnissen von C:\temp\* sollen gefunden und aufgelistet
werden? [sinngemäss auch in D:\daten\hugo]
Output wäre dann in etwa:
c:\temp\irgendwas.qml
c:\temp\ramsch\wasanderes.qml
d:\daten\hugo\projekt1\trullala.qml
--> Soll die Ausgabe in eine weitere Datei erfolgen, oder reicht es aus,
die Ausgabe auf dem Bildschirm anzusehen?
------
Wenn meine Glaskugel trübe ist:
könntest du bitte mal entsprechend meinem obigem Beispiel den exakten
"input" und den "output" hier hin schreiben ?
Wegstaben V. schrieb:> und welche "Aufgabe" hat die csv Datei im Zusammenhang zu den .qml> Dateien?
Die csv Datei beinhaltet die String, die bei qml Dateien zu durchsuchen.
Statt einen hardcodiert string in code zu geben, war die Idee einen csv
Datei schreiben und dann die zu prüfenden String von dort zu holen.
Wegstaben V. schrieb:> du schriebst":>> "einen Script, der .csv datei liesst und Path rekursiv nach> bestimmten Endungen (.qml) durchsucht.">> --> In der csv-Datei stehen also eine oder mehrere (Grund-) Pfade drin,> und am diesen Pfaden soll rekursiv nach .qml Dateien gesucht werden?
@nein
die csv beinhaltet genau diesen zeilen:
1
Import,Versionnumber
2
importQtQuick,2.9
3
importQtQuick.XmlListModel,2.0
4
importQtQuick.Particles,2.0
5
importQtQuick.Window,2.3
6
importQtQuickControls,1.5
7
importQtQuick.Controls,2.2
8
importQtQuick.Dialogs,1.2
9
importQtQuick.Layouts,1.3
Wegstaben V. schrieb:> --> Soll die Ausgabe in eine weitere Datei erfolgen, oder reicht es aus,> die Ausgabe auf dem Bildschirm anzusehen?
Nein
Diese Script wird aus(Qt)UnitTest ausgeführt und wenn es fehler schlägt
dann der Fehlergrund und die betroffene QML File ausgeben.
galilio12 schrieb:> Die csv Datei beinhaltet die String, die bei qml Dateien zu durchsuchen.
Also möchtest du folgendes?
Ab einem gewissen Basis-Pfad (incl. rekursives tiefer gehen in weitere
Unterverzeichnisse) sollen alle .qml Dateien nach den Suchmustern
durchsucht werden, welche in deiner .csv Datei hinterlegt sind.
galilio12 schrieb:> und wenn es fehler schlägt> dann der Fehlergrund und die betroffene QML File ausgeben.
Aha. Und welche Fehler sind das nun genau? Das könnte z.B. sein:
- in verschiedenen Pfaden sind generell keine .qml Dateien vorhanden
- nicht alle der genannten 8 Strings sind genau so in einer zu
untersuchenden .qml Datei vorhanden
- der String ist vorhanden, aber die Versionsnumemr stimmt nicht überein
Wegstaben V. schrieb:> Aha. Und welche Fehler sind das nun genau? Das könnte z.B. sein:> - in verschiedenen Pfaden sind generell keine .qml Dateien vorhanden
Das ist nicht als Fehler vorgesehen
> - nicht alle der genannten 8 Strings sind genau so in einer zu> untersuchenden .qml Datei vorhanden
Diese auch nicht
> - der String ist vorhanden, aber die Versionsnumemr stimmt nicht überein
diese ja
z.B:
Das QML File wird auf folgende untersucht:
z.B Ist die:
1)"import QtQuick" vorhanden, dann muss die Versionsnummer geprüft
werden.
2)Ist "import QtQuick" dann weitersuchen (also next string und so
weiter)
Mein Verständnis:
Im Prinzip sollen in der qml-Datei alle Zeilen (außer der ersten)
gefunden werden, die mit einem der Einträge in der ersten Spalte des
.cvs beginnen. Für jeden Fund soll geprüft werden, ob darauf der Wert
der zweiten Spalte folgt oder nicht.
Beispiel:
CSV-Datei:
galilio12 schrieb:
1
Import,Versionnumber
2
importQtQuick,2.9
3
importQtQuick.XmlListModel,2.0
4
importQtQuick.Particles,2.0
5
importQtQuick.Window,2.3
6
importQtQuickControls,1.5
7
importQtQuick.Controls,2.2
8
importQtQuick.Dialogs,1.2
9
importQtQuick.Layouts,1.3
In der .qml-Datei steht
1
importQtQuick2.9
2
importQtQuick.Controls2.5
Dann soll das Skript für die zweite Zeile einen Fehler ausgeben, da dort
2.2 statt 2.5 stehen müsste.
Rolf M. schrieb:> Mein Verständnis:> ...
JA, das habe ich auch so verstanden bzw. "erarbeitet".
Das Manko des Thread-Eröffners (nicht nur seins) ist halt, das er "das
Problem" nicht präzise genug beschreiben kann (konnte).
Wnn man in der Lage ist, ein Problem "genau" zu beschreiben (incl. der
Randbedingungen), dann ist man ja auch schon auf halben Weg zur Lösung
Ob oder wie die Such-Anforderung in Python aussieht, oder ob das oben
formulierte die Aufgabe erfüllt, weiss ich leider nicht.
galilio12 schrieb:> Die csv Datei beinhaltet die String, die bei qml Dateien zu durchsuchen.> Statt einen hardcodiert string in code zu geben, war die Idee einen csv> Datei schreiben und dann die zu prüfenden String von dort zu holen.> [...]>
1
>Import,Versionnumber
2
>importQtQuick,2.9
3
>importQtQuick.XmlListModel,2.0
4
>importQtQuick.Particles,2.0
5
>importQtQuick.Window,2.3
6
>importQtQuickControls,1.5
7
>importQtQuick.Controls,2.2
8
>importQtQuick.Dialogs,1.2
9
>importQtQuick.Layouts,1.3
10
>
Du möchtest Deinen Librarypfad rekursiv durchsuchen, in jede dort
gefundene .qml-Datei schauen, die Versionsnummer extrahieren und dann
schauen, ob die Version mit der in Deiner CSV-Datei hinterlegten
übereinstimmt?
Sheeva P. schrieb:> Du möchtest Deinen Librarypfad rekursiv durchsuchen,
Nein, er möchte das Verzeichnis mit seinen QML-Dateien rekursiv
durchsuchen.
> in jede dort gefundene .qml-Datei schauen, die Versionsnummer extrahieren
Nicht die Versionsnummer der QML-Datei, sondern die Versionsnummern
aller darin enthaltenen import-Anweisungen. In QML gibt man beim
Einbinden eines Moduls per import immer mit an, welche Version man will.
> und dann schauen, ob die Version mit der in Deiner CSV-Datei hinterlegten> übereinstimmt?
Ja. Er möchte offenbar sicherstellen, dass alle seine QML-Dateien die
selbe Version eines jeweiligen Moduls einbinden.
Rolf M. schrieb:> Sheeva P. schrieb:>> und dann schauen, ob die Version mit der in Deiner CSV-Datei hinterlegten>> übereinstimmt?>> Ja. Er möchte offenbar sicherstellen, dass alle seine QML-Dateien die> selbe Version eines jeweiligen Moduls einbinden.
Hmmm... ich hab' mir gerade mal was gebastelt und in die Verzeichnisse
von Orange Data Mining [1] geschaut, und heraus kommt:
--snip-----
34 QtQuick 2.0
52 QtQuick 2.1
131 QtQuick 2.2
1 QtQuick 2.3
4 QtQuick 2.4
18 QtQuick 2.5
6 QtQuick 2.6
6 QtQuick 2.8
1 QtQuick 2.9
254 QtQuick 2.10
--snap-----
Ich hab' seit Qt4 nichts mehr mit Qt gemacht und kenne QML auch nur vom
Hörensagen. Aber mir scheint, daß in so einem Projekt offenbar mehrere
Versionen derselben QML-Library (?) angezogen werden und womöglich sogar
koexistieren können? Hat so eine Art Test dann überhaupt einen Sinn?
[1] https://orange.biolab.si/