Bonjour,
Je suis actuellement en train de créer un module qui permet de lire dans un fichier (ci-dessous) et recréer un autre fichier avec uniquement ce qui m’intéresse: à savoir les hardware ID (une par ligne).
Voici un bout du fichier avant avec les éléments que je souhaite garder:
Et voici à quoi ça devrait ressembler après traitement:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 ROOT\*ISATAP\0002 Name: Carte Microsoft ISATAP #3 Hardware IDs: *ISATAP ACPI\THERMALZONE\THRM Name: Zone thermique ACPI Hardware IDs: ACPI\ThermalZone *ThermalZone STORAGE\VOLUMESNAPSHOT\HARDDISKVOLUMESNAPSHOT6 Name: Cliché instantané de volume générique Hardware IDs: STORAGE\VolumeSnapshot ROOT\SYSTEM\0000 Name: Énumérateur de périphérique logiciel Plug-and-Play Hardware IDs: root\swenum ROOT\*ISATAP\0003 Name: Carte Microsoft ISATAP #4 Hardware IDs: *ISATAP ACPI\INT3F0D\4&1D135828&0 Name: Ressources de la carte mère Hardware IDs: ACPI\INT3F0D *INT3F0D Compatible IDs: *PNP0C02
Mon problème est selon moi ma compréhension de QTextStream. J'ai bien sur lu la doc, mais elle reste un peu compliqué à comprendre en anglais. Voici mon bout de code(attention aux yeux ):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 *ISATAP ## // Indique qu'on passe à un nouvel Hardware ACPI\ThermalZone *ThermalZone ## STORAGE\VolumeSnapshot ## root\swenum ## *ISATAP ## ACPI\INT3F0D *INT3F0D
Mon premier problème est que ma boucle est infini.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 QString filename = "hwids.txt"; QFile fichier(filename); fichier.open(QIODevice::ReadOnly | QIODevice::Text); QTextStream flux(&fichier); QString ligne; QString fichierOut; while (! flux.atEnd()) // Tant qu'il y a des caractères dans le fichier { ligne = flux.readLine(); if (ligne.contains ("Hardware IDs", Qt::CaseInsensitive)) { ligne = flux.readLine(); while ( ligne.contains (" "), Qt::CaseSensitive) { fichierOut += ligne + '\n'; fichierOut.resize(fichierOut.size()-1); ligne = flux.readLine(); qDebug() << ligne; } fichierOut += '#' + '\n'; } } qDebug() << fichierOut; // ... // ... fichierOut > fichierOut.txt
J'utilise ici readLine() pour passer à la ligne suivante. C'est peut être une erreur?
contains() n'est peut être pas la meilleure fonction pour faire ce que je veux?
Il y a possiblement aussi un problème avec mon algo...
En tout cas, merci pour votre future aide.
Lanou, newbie c++ & Qt
Edit: Je travaille actuellement dessus avec startsWith() à la place de contains() qui me parait plus adapté et cela marche. Par contre je n'ai pas les retours à la ligne
APRES (En vert les éléments corrigés, en Rouge les éléments supprimés )
Et voici ce que ça donne pour le moment:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 QString filename = "hwids.txt"; QFile fichier(filename); fichier.open(QIODevice::ReadOnly | QIODevice::Text); QTextStream flux(&fichier); QString ligne; QString fichierOut; while (! flux.atEnd()) // Tant qu'il y a des caractères dans le fichier { ligne = flux.readLine(); if (ligne.contains ("Hardware IDs", Qt::CaseInsensitive)) { ligne = flux.readLine(); while ( ligne.startsWith((" "), Qt::CaseSensitive) { fichierOut += ligne.trimmed() + '\n';fichierOut.resize(fichierOut.size()-1);ligne = flux.readLine(); qDebug() << ligne; }fichierOut += '#' + '\n';fichierOut += "##"; fichierOut += '\n'; } } qDebug() << fichierOut; // ... // ... fichierOut > fichierOut.txt
Je ne pouvais pas ajouter plusieurs caractères dans mon QString avec des "+". Si quelqu'un pourrait m'expliquer pourquoi.. Merci!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 *ISATAP ## ACPI\ThermalZone *ThermalZone ## STORAGE\VolumeSnapshot ## root\swenum ## *ISATAP ## ACPI\INT3F0D *INT3F0D ## STORAGE\VolumeSnapshot ## BTHENUM\{dd533152-01f4-435c-abfe-984bc21a2a65}_LOCALMFG&0000 ## ACPI_HAL\PNP0C08 *PNP0C08 .......
Partager