Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Lecture fichier texte Delphi

  • Initiateur de la discussion Initiateur de la discussion Loïg
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Loïg

XLDnaute Nouveau
Bonsoir,
J’ai une application en Delphi qui utilise un fichier texte, celle-ci fait un petit calcul de degrés heure. Je voudrais transposer ce calcul en VBA, malheureusement je ne comprends pas le format du fichier texte. Quelqu’un saurait il lire ce fichier dans Excel ?
Par avance merci.
Je vous joins le fichier texte, que le code fonctionnant en Delphi.

Code:
Type
    TTemp = array[1..8760] of SmallInt;
Var
   Temp : TTemp;
   Fich : File of TTemp;
   i,total, base,DegresHeures : Integer;

begin
   if FileExists('C:\...\Text.txt') then
   Begin
     Base := 19*10;
     Total := 0;
     AssignFile(Fich,'C:\...\Text.txt');
     Reset(Fich);
     Read(Fich,Temp);
     CloseFile(Fich);
     For i := 1 to 8760 do
     Begin
          if Temp[i] < Base then
             Total := Total + (Base-Temp[i]);
     end;
     DegresHeures := Round(Total div 10);
     Edit1.Text := inttostr(DegresHeures);
     edit2.Text := inttostr(Temp[12]);
     edit3.Text := inttostr(Temp[1222]) ;
    End;

end;
 

Pièces jointes

Re : Lecture fichier texte Delphi

Bonsoir,

Ce que tu demandes sera nécessairement possible ... avec quelques explications supplémentaires ... s'agit-il d'une formule utilisée dans la climatisation ... ? existe-t-il une source, un site qui décrit ta formule ...

A +
 
Re : Lecture fichier texte Delphi

Merci pour ta réponse.

En faite le fichier contient la température heure par heure d’une station météo.
Donc 8760 données signées.
6.2°C a pour valeur 62.

Cette formule je l’utilise pour du chauffage, les degrés heures représente le cumule sur une période donnée, ici un an, de l’écart entre la température moyenne d’une heure et une température données, ici 19°C.

A+
 
Re : Lecture fichier texte Delphi

Bonsoir,

Indépendament de ton code Delphi, est-ce que tu as déjà un code VBA qui ouvre ton ficheir texte et qui copie toutes les 8760 valeurs
dans ta feuille Excel ...?
Ensuite, il faudra refaire ine formule en VBA (ou pas) pour les calculs d'écarts de température ...
A +
 
Re : Lecture fichier texte Delphi

Bonsoir

Il semble plus simple de recréer ton projet en VBA en traduiasant ton code Delphi non ?

A vue de nez, ton code Delphi donnerait en VBA (sauf erreur de ma part)
Code:
Dim Temp, TTemp
Dim i%, total%, base%, DegresHeures%
Base = 19*10
Total = 0
If Not Dir("C:\Temp\Text.txt") <>"" Then
Open "C:\Temp\Text.txt" For ' la j'ai un trou
For i = 1 to 8760 
          if Temp(i) < Base then
             Total = Total + (Base-Temp(i)
     end if
Next i
DegresHeures = Round(Total Mod 10)
TextBox1=Cstr(DegresHeures)
TextBox2=Cstr(Temp(12))
TextBox3=Cstr(Temp(1222))
 
Dernière édition:
Re : Lecture fichier texte Delphi

Bonjour messieurs,
Pour répondre à ta première question James007, non je n’ai pas le code pour lire ce fichier.
J’ai eu l’informaticien qui a développé le bout de code en Delphi. Il m’a dit que pour lui le fichier texte n’était pas codé. Il m’a dit que les données sont stockées au format SmallInt (2 octets signé)
Staple1600, j’ai essayé ton code, j’arrive à lire une chaine de caractère, mais celle-ci n’est pas dans un format base 10 et je n’ai pas 8760 chaine.
VB:
 Open "C:\...\Text.txt" For Input As #1

Merci pour votre aide
 
Re : Lecture fichier texte Delphi

Bonjour Loig,
Hi Staple🙂,

Si le fichier est un fichier unicode (ce qu'il a l'air d'être) :
(Ne pas oublier de remplacer FICHIER par le chemin et le nom du fichier)
Code:
Sub Test()
    Dim i As Long, total As Long, base As Long
    Dim iFile As Integer
    Dim Temp()
 
    base = 19 * 10
    total = 0
 
    iFile = FreeFile()
    Open FICHIER For Binary As iFile
    ReDim Temp(1 To LOF(iFile) / 2 + 1)
 
    Do While Not EOF(iFile)
        i = i + 1
        Temp(i) = AscB(StrConv(InputB(2, #iFile), vbUnicode))
        If IsNumeric(Temp(i)) Then
        If Temp(i) < base Then total = total + (base - sCar)
        End If
    Loop
    Close #iFile
    TextBox1 =Cstr( Round(total / 10))
    TextBox2 = Cstr(Temp(12))
    TextBox2 = Cstr(Temp(1222))
End Sub

Ce qui nous fait
TextBox1 = 151031
TextBox2 = 64
TextBox3 = 54

Est-ce que cela a un sens? en tout cas il m'échappe😕

A+
 
Dernière modification par un modérateur:
Re : Lecture fichier texte Delphi

Bonjour Hasco,
Bonjour le forum,
A quoi correspond le champ « sCar » ? Quand je le replace part Temp(i) je n’ai pas les mêmes résultats que toi.

Les résultats issus du code Delphi sont :
TextBox1 : 80874
TextBox2 : 64
TextBox3 : 54

Encore Merci pour votre aide.
 
Re : Lecture fichier texte Delphi

Re,

sCar est une escarre, trace de mes neurones qui tournent en fromage blanc!!!!
C'est une variable que j'avais créée pour test et que j'ai négligeament laissé.

Donc c'est bien Temp(i) qu'il faut mettre.

Fait vérifier le résultat par quelqu'un qui connais le fichier. Car je n'ai pas réussi à déterminer exactement en encodage. Mais à priori, puisque les TextBox2 et 3 sont bons, j'ai tapé juste dans le décodage.

A+
 
Dernière modification par un modérateur:
Re : Lecture fichier texte Delphi

Bonsoir à tous

Merci d'avoir répondu à l'invitation, Hasco
J'étais parti sur ADO ou ADODB et adSmallInt
Mais Excel 2010 fait des siennes sous Vista
(plus de MDAC mais VDAC et tous les codes ADO sous VBA ne fonctionne plus .
Vbscript non plus -> Set objConnection = CreateObject("ADODB.Connection") -> Kaput )

M'égares-je avec adSmallINt, Hasco ?
 
Dernière édition:
Re : Lecture fichier texte Delphi

Re,
Je joins à cette réponse un tableur où j’ai importé les données avec la méthode en delphi et avec la méthode en VBA. Je trouve quelles que différences.
Auriez-vous une idée d’où peu venir ces différences?

A+

Text.zip
 
Re : Lecture fichier texte Delphi

Bonjour,

Loïg, pour moi, je ne vois pas. Et ne peux pas voir d'ou cela provient.(Boule de crital cassée).

Staple, adSmallint est un type de données. La question était de savoir comment lire le fichier.

Avec ADODB peut-être qu'en paramètrant un StreamReader nous aurions pu nous en sortir, mais sans connaître le Charset de codage pour Unicode (utf-8, utf-16 etc..) nous aurions tâtonner sans être sûr d'y parvenir.

Une bonne vielle lecture par 2 octets à la fois m'a semblé préférable.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

C
Réponses
3
Affichages
1 K
creal69360
C
J
Réponses
1
Affichages
1 K
J
Réponses
0
Affichages
1 K
Jojolapin
J
M
Réponses
4
Affichages
2 K
M
M
Réponses
3
Affichages
4 K
_matt_44
M
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…