Traiter un fichier inconnu

Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011 - 21 mars 2007 à 22:59
Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011 - 27 mars 2007 à 01:28
Bonjour


J'ai des fichiers crée par un de mes logiciels ( pas de moi (1D Stock cutter de astrokettle)) que j'aimerais traité.


Le fichier est un *.stc


J'ai des images du logiciel et de la structure du fichier.
http://i48.photobucket.com/albums/f218/ERLTECH_projet/structure.jpg


Maintenant, j'ai crée un logiciel mais j'aimerais pouvoir allez lire
une ligne dans ce fichier et pouvoir soit enlever ou ajouter...j'ai
réussi avec d'autre type de fichier (Excel) mais je ne sais pas comment
traité les .stc


en fais ce fichier est comme une base de donnée qui contient des
longueur d'aluminium. Avec mon logiciel, j'aimerais savoir si j'ai la
longueur en stock, et enlever ou ajouter une quantité


J'ai écrit aux concepteurs du logiciel et je vous colle la réponse qu'il m'ont envoyer!!


--------------------------------------------------------------------------------------

Basically, *.stc is file of longint = signed 32 bit integer,
v2147483648..2147483647.

The data structure reflects the Stock Material Tab
table content. 

 

Check

value

Check line: Bl+2 Bl+2 Bl+2 Bl+2
Bl+1

Mult line Dec0 Dec1 Dec2 Dec3 Bl+1 VerNo

Data line1 d0 d1 d2 d3
Bl+1

Data line2 d0 d1 d2 d3 Bl+1

Data line3 d0 d1 d2 d3
Bl+1

...

Stop line Bl+1 Bl+1 Bl+1 Bl+1 Bl+1

Comments data (you don't
need)

 

Bl = -55555 - empty cell marker;

d0...d3 - data from table
columns 1..4 (multiplied by 10^dec0..10^dec3);

dec0..dec3 - multipliers
(powers) for decimal/fractional values from the

tables to write them as
integers.

--------------------------------------------------------------------------------------


Voici le site du concepteur. Il y a un démo du logiciel disponible.

http://www.astrokettle.com/pr1dsc.html

Je met aussi à la dispo un fichier .stc
http://www.erltechnologie.com/PIL4040.stc


J'espere que quelqu'un pourras bien m'aider


@+

14 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
21 mars 2007 à 23:34
Salut,
voila toutes tes données sont lues dans un tableau en Long
à toi de savoir à quoi elles correspondent
les modifier, les supprimer, etc... et les recopier dans un autre fichier

    Dim T() As Long
    Dim i   As Integer
    Dim nb  As Integer
   
' Lecture
    Open "C:\VBdan\Vbtest\pil4040.stc" For Binary As #1
         nb = LOF(1) / 4
         ReDim T(nb)
         For i = 1 To nb
             Get #1, , T(i)
             Next
         Close #1

' Edition
    For i = 1 To nb
        MsgBox T(i)
        Next

Daniel
0
bigbigmoumou Messages postés 18 Date d'inscription jeudi 20 mars 2003 Statut Membre Dernière intervention 22 mars 2007
22 mars 2007 à 00:00
Bonsoir,

En regardant ton fichier .stc avec un éditeur hexa et avec les info que le concepteur t'as donné :

Ce fichier se compose d'une suite d'entier long signé (32 bits, soit 4 octets)
Ce qui donne, à partir de l'éditeur hexa, après conversion en décimal :
-55553 -55553 -55553 -55554
-55554 2 0 0
2 -55554 281 37200
1 -55555 0 -55554
38600 1 -55555 0
-55554 50500 1 -55555
0 -55554 53500 1
-55555 0 -55554 68000
1 -55555 0 -55554
-55554 -55554 -55554 -55554
-55554 326058812 208561517 1345601139
1613771896 174155080 1612718201


Les -55554 = Bl+1 servent de fin de ligne.
D'après la strcuture donnée on obtient :
Ligne de Vérif : -55553 -55553 -55553 -55553 -55554 : Toujours la même.
Ligne des coefficient multiplicateur : 2 0 0 2 -55554
=> Colonne 1 : x100
=> Colonne 2 : x1
=> Colonne 3 : x1
=> Colonne 4 : x100

Numéro de Version : 281 => Version 2.81

Ligne 1 de Données : 37200 1 -55555 0 -55554
Ligne 2 de Données : 38600 1 -55555 0 -55554
Ligne 3 de Données : 50500 1 -55555 0 -55554
Ligne 4 de Données : 53500 1 -55555 0 -55554
Ligne 5 de Données : 68000 1 -55555 0 -55554

Ligne de Stop : -55554 -55554 -55554 -55554 -55554 : Toujours ces valeurs

Commentaires :
326058812 208561517 1345601139
1613771896 174155080 1612718201
OU en format text en gros (Je vois paq trop ici):
<Co
men
s>4Px40'Heav
y `

Après faut que tu regardes les données qui apparaissent dans le programme avec ce fichier et faire le lien pour retrouver les valeurs et leur signification.
0
Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011
22 mars 2007 à 00:10
Salut et merci pour vos réponse,


Avec le premier message, j'arrive à lire le fichier!!!comprend rien mais ok pour la !!!


La J'ai réalisé que le fichier du liens  ne concorde pas avec le screenshot donc je redonne le liens du BON fichier!!!
http://www.erltechnologie.com/54.31.stc


Maintenant, j'ai essayer des multiplication comme mantionné dans la
réponse des concepteurs mais en vain (ne comprenant pas trops comment
faire et koi multiplier


Maintenant avec les explications de [auteurdetail.aspx?ID=72034 bigbigmoumou]je voix un peu mieux la structure interne mais la question est comment jouer avec tous ces chiffre


Je crois que je suis moin avancé que je le croyait!!! en tous cas pour CA!!


Si on oublie pour l'instant(Sans importance) les commentaires

Pouvez-vous me donné une piste à suivre pour mettre les valeur dans un
list box à 4 colonne sachant qu'il ce retrouve ainsi dans le logiciel!


Merci pour votre aide précieuse

@+
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
22 mars 2007 à 01:12
je te met toute les données dans une ListView  (ListBox muticolonnes bof)
à la fin j'ai 6 fois Bl+1 et 7 pour les commentaires, d'où le (nb - 13) si c'est pas toujours vrai il faut trouver une autre méthode, par exemple Size négative peut être

Private Sub Form_Load()
    Dim i       As Integer
    Dim nb      As Integer
    Dim coef(4) As Long
    Dim T()     As Long
    Dim Ligne   As ListItem

    ListView1.ColumnHeaders.Add , , "Size"
    ListView1.ColumnHeaders.Add , , "Avail"
    ListView1.ColumnHeaders.Add , , "Copy"
    ListView1.ColumnHeaders.Add , , "Cost"
   
    Open "C:\VBdan\Vbtest\54.31.stc" For Binary As #1
         nb = LOF(1) / 4
         ReDim T(nb)
         For i = 1 To nb
             Get #1, , T(i)
             Next
         Close #1
   
    coef(1) = 10 ^ T(6)
    coef(2) = 10 ^ T(7)
    coef(3) = 10 ^ T(8)
    coef(4) = 10 ^ T(9)
   
    For i = 11 To (nb - 13) Step 5
        Set Ligne = ListView1.ListItems.Add
        Ligne.Text = T(i + 1) / coef(1)        If T(i + 2) >0 Then Ligne.SubItems(1) T(i + 2) / coef(2)        If T(i + 3) >0 Then Ligne.SubItems(2) T(i + 3) / coef(3)        If T(i + 4) >0 Then Ligne.SubItems(3) T(i + 4) / coef(4)
        Next
   
End Sub

Daniel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
22 mars 2007 à 01:37
bon je décale de 1 à cause du numéro de version que j'avais mis dans la ligne suivante
je compte 5 pour le Stop Fin et +5 pour les commentaires d'où le (nb - 10)
mais de toute façon nb tout seul suffirait, à cause du test

    For i = 12 To (nb - 10) Step 5
        If T(i) < 0 Then Exit For
        Set Ligne = ListView1.ListItems.Add
        Ligne.Text = T(i) / coef(1)        If T(i + 1) >0 Then Ligne.SubItems(1) T(i + 1) / coef(2)        If T(i + 2) >0 Then Ligne.SubItems(2) T(i + 2) / coef(3)        If T(i + 3) >0 Then Ligne.SubItems(3) T(i + 3) / coef(4)
        Next

Daniel
0
bigbigmoumou Messages postés 18 Date d'inscription jeudi 20 mars 2003 Statut Membre Dernière intervention 22 mars 2007
22 mars 2007 à 02:09
Une autre version pour lire ces fichiers.
Il y a quelques tests de vérif supplémentaires mais pas encore complet.

Le commentaire final ressemble fortement au text du haut du tableau, mais il manque certain caractère, étrange...

Private Sub Form_Load()

Dim Donnees() As Long
Dim coef(3) As Long
Dim Version As Long
Dim VersionText As String
Dim Lu As Long
Dim LuText As String
Dim LigneLue As Integer
Dim Tmp As Integer
Dim TmpNb As Integer
Dim Commentaire As String * 100

' Lecture
Open "D:\calcul\54.31.stc" For Binary As #1

ReDim Donnees(LOF(1) / 4, 3)

If LOF(1) >= (4 + 4 + 1) * 4 Then
' - Lecture de la ligne de vérif : 4 premiers long -
For Tmp = 0 To 3
Get #1, , Lu
If Lu <> -55553 Then MsgBox "Erreur dans la ligne Vérif."
Next Tmp
Get #1, , Lu
If Lu <> -55554 Then MsgBox "Erreur dans la ligne Vérif."

' - Lecture des 4 Coefs -
PosLecture = 0
For Tmp = 0 To 3
Get #1, , coef(Tmp)
Next Tmp
Get #1, , Lu
If Lu <> -55554 Then MsgBox "Erreur dans la ligne des Coef"
'- Remise en forme des Coef -
For Tmp = 0 To 3
coef(Tmp) = 10 ^ coef(Tmp)
Next Tmp
'- Affichage des Coef -
MsgBox "Coef : " & coef(0) & " / " & coef(1) & " / " & coef(2) & " / " & coef(3)

' - Lecture du Numéro de Version -
Get #1, , Version
' - remise en forme de la Version -
VersionText = CStr(Version / 100)
' - Affichage de la Version -
MsgBox "Version : " & VersionText

Else
MsgBox "Fichiers invalide : Trop court": End
End If

' - Lecture des Données -
LigneLue = 0
Do While Not EOF(1)

For Tmp = 0 To 3
Get #1, , Donnees(LigneLue, Tmp)
Next Tmp
Get #1, , Lu
If Lu <> -55554 Then MsgBox "Erreur en fin de ligne de données"

' - Test si on vient de lire ou non la ligne de fin de données -
TmpNb = 0
For Tmp = 0 To 3
If Donnees(LigneLue, Tmp) -55554 Then TmpNb TmpNb + 1 Else Exit For
Next Tmp
If TmpNb = 4 Then Exit Do '- On vient de lire la ligne de fin de données -

'- Remise en forme des Données (Coef) -
For Tmp = 0 To 3
If Donnees(LigneLue, Tmp) <> -55555 Then Donnees(LigneLue, Tmp) = Donnees(LigneLue, Tmp) / coef(Tmp)
Next Tmp

'- Affichage des Données -
LuText = ""
For Tmp = 0 To 3
Lu = Donnees(LigneLue, Tmp)
If Lu = -55555 Then
' - Cas de donnée inexistante -
LuText = LuText + "---" & " / "
Else
LuText = LuText + CStr(Lu) & " / "
End If
Next Tmp
MsgBox "Données : Ligne n° " & LigneLue & " : " & LuText

LigneLue = LigneLue + 1
Loop

'- Lecture des Commentaires -
Get #1, , Commentaire
MsgBox "Commentaire : " & Commentaire

'- Fermeture du Fichier -
Close #1

End Sub
0
Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011
22 mars 2007 à 02:18
Merci pour la piste...


Ca marche pour la première ligne mais pas pour le reste...


Je vais essayer d'analysé ca et je reviendrais pour vous donné des nouvelle!!


Merci!
0
Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011
22 mars 2007 à 02:39
Oups....bigbigmoumou, j'avais pas vu ton post!!


j'ai essayer la version de gobillot et après quelques modif (Très petite!) j'ai réussi a avoir mes liste


Gobillot!! T'AS RAISON!!!! c'Est mieux le ListView!!!! c'étais mon erreur!!!


Maintenant, reste a voir comment on modifie les donnée de ces fichiers!!!
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
22 mars 2007 à 02:51
Salut,
toutes les données sont dans le Tableau de l'indice 11 jusqu'à i-1
à partir de i on a le Stop Fin sur 5 puis les commentaires
tu modifies le tableau en ajoutant/supprimant et en décalant les éléments du tableau
sans jamais toucher au début ni à la fin

ensuite tu réécris le Tableau après modification avec Put au lieu de Get
d'où l'intérêt d'avoir un Tableau qui représente le fichier complet

Daniel
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
22 mars 2007 à 02:58
ha zut encore mon erreur c'est pas 11 c'est 12

5 (début) + 6 (coefficients) + nb * 5  (les données) + 5 (fin) + commentaires

Daniel
0
Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011
22 mars 2007 à 02:59
Salut,


Je regarde ca et je vous reviens demain!!


@+
0
bigbigmoumou Messages postés 18 Date d'inscription jeudi 20 mars 2003 Statut Membre Dernière intervention 22 mars 2007
22 mars 2007 à 14:55
Bonjour,

Après faudrait voir la méthode de lecture/écriture que le concepteur utilise et les diverses versions.

En effet, un fichier de version 1 ne possédait peut être que 2 colonnes.
Le pas de lecture était donc peut être différent ce qui serait problèmatique pour lire le fichier.
A l'inverse, la version 3 aura peut-être 5 colonnes...

Vu qu'il y a un code de fin de ligne, celà semble être prévu.
Il faudait savoir à quoi servent ces fin de lignes et comment les utiliser, seul le concepteur le sait...

De plus, il faudrait vérifier que le fichier n'est pas endommagé, que les code de vérifs, fin de ligne... soient bien présent.
Etc.

Celà dépend bien sur ce que tu désire faire.
Si c'est juste lire une fois quelques gros fichiers ou si c'est accèder à ce fichier par un autre programme, quelque soit les versions passée (les futurs pouvant ne pas être compatibles)

A+
0
Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011
22 mars 2007 à 14:59
Salut, Pour l'instant je prévois rester avec la version actuel du
logiciel et on ne prévois pas changer! donc pour l'instant la version
des fichier va reste la 2.81.


@+
0
Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011
27 mars 2007 à 01:28
Salut à tous,


J'ai essayer de faire les modification mais ca ne marche pas. J'ai
essayer de fouiller pour trouver comment faire mais j'ai rien trouver


Si quelqu'un pourrait m'aider ca serait aprécier car la ca n'avance plus!!


Merci
0
Rejoignez-nous