Un fichier text impossible à lire [Résolu]

Signaler
Messages postés
302
Date d'inscription
vendredi 21 septembre 2007
Statut
Membre
Dernière intervention
6 février 2013
-
Messages postés
302
Date d'inscription
vendredi 21 septembre 2007
Statut
Membre
Dernière intervention
6 février 2013
-
Messieurs Dames,

Je vous viens avec un petit problème qui m'épate et dont je ne comprend pas la cause (logique, si j'la comprennais, je posterais pas ici )..

Alors voilà, j'ai un domaine et chaque poste qui s'y connecte pour la premiére fois lance un petit script qui permet de récupérer les informations du poste (Système d'exploitation et version, type de machine, marque modèle, processeur etc...) afin d'avoir un petit inventaire, pour ce faire, le script lance l'executable MSINFO32 en ligne de commande (un utilitaire windows), celui-ci me créé un fichier sur mon serveur avec le nom du poste et les infos que je désirs.

Ce que je souhaite faire, c'est un petit programme qui va lire les infos du fichier et me les mettre dans une feuille excel. Bon, jusque là, pas de soucis. Mais lorsque mon programme lit le fichier, il voit : "ÿþR", voici mon code :

procedure TForm1.Button1Click(Sender: TObject);
var sl:TStringList;
begin
sl:=TStringList.Create;
sl.LoadFromFile('C:\inventaire\NOMMACHINE.txt');
memo1.text:=sl.text;
sl.free;
end;

J'ai essayé ce code pour l'un des fichiers que j'ai rapatrié sur mon poste (j'me suis dis au cas où que la cause serai le fait que le fichier soit sur un serveur...), mais s'affiche dans mon memo : "ÿþR"

J'ai essayé de créer un fichier TOTO.txt dans le même repertoire et en lisant ce fichier avec ce même bout de code j'obtient le bon text...

Est-ce le formatage du fichier généré par l'utilitaire MSINFO32 qui pose problème ? Car comme par hazard la première lettre du fichier est censé être un "R" et je vois affiché "ÿþR" comme si il ne m'affiché que le premier caractére encodé en je ne sais quel "language"...

Bref, j'ai besoins de votre aide pour comprendre le phénoméne , et merci pour cette aide




L'Armand joue, l'arme en joug... www.art-ment.com

5 réponses

Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
28 mai 2020
29
Salut,

MSInfo32.exe écrit par défaut en Unicode il faut donc en tenir compte lors de la lecture


[hr]@+Cirec
[hr]
Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
28 mai 2020
29
un petit exemple pour la forme

[hr]procedure TForm1.Button1Click(Sender: TObject);

[b]const
  /b{Signature Unicode}
  UnicodeSign =  $FEFF;
[b]var
  /bMS: TMemoryStream;
  aUnicodeSign: Word;
  aWideString: PWideChar;
[b]begin
  /baWideString :=  nil ;
  MS : = TMemoryStream.Create;
  [b]try
      /b {Charge le fichier}
    MS.LoadFromFile('c:\msinfoReport.txt');
      {On recupere la signature}
    MS.ReadBuffer(aUnicodeSign, SizeOf(Word));
      {Si elle ne correspond pas on sort}
    if aUnicodeSign <> UnicodeSign [b]then
      /bExit;
      {On alloue la mémoire utile}
    aWideString : = AllocMem(MS.Size-SizeOf(Word));
      {On recupere les données}
    MS.ReadBuffer(aWideString^, MS.Size-SizeOf(Word));
      {On les convertis et on les affiches}
    Memo1.Lines.Text := WideCharToString(aWideString);
  [b]finally
      /b{Et on libère le tout avant de quitter}
    FreeMem(aWideString, MS.size-SizeOf(Word));
    MS.Free;
  end;
end;



[hr]@+Cirec
[hr]
Messages postés
4199
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
29
tu fait bien la commande :

start /wait msinfo32.exe /report msinfo.txt

?
Messages postés
302
Date d'inscription
vendredi 21 septembre 2007
Statut
Membre
Dernière intervention
6 février 2013
1
Merci foxi pour ton interet !

voici ce qu'il y a dans mon script :

if not exist \\MONSERVEUR\MONPARTAGE\%COMPUTERNAME%.txt msinfo32.exe /report \\MONSERVEUR\MONPARTAGE\%COMPUTERNAME%.txt /categories +ComponentsProblemDevices

Donc je vérifie si un fichier au nom du poste n'existe pas, si il n'existe pas j'execute la commande et en ne sélectionnant que la catégorie ComponentsProblemDevices, comme ça j'ai les infos de base, plus les problèmes périphériques (si un driver n'est pas installé), le reste m'importe peu.
Mais le truc c'est que le fichier créé, j'arrive à le lire sans problème avec notepade...


L'Armand joue, l'arme en joug... www.art-ment.com
Messages postés
302
Date d'inscription
vendredi 21 septembre 2007
Statut
Membre
Dernière intervention
6 février 2013
1
Que dire à part... Merci Ô grand Manitou Cirec


L'Armand joue, l'arme en joug... www.art-ment.com