Aller au contenu

Messages recommandés

Posté(e)

Les fonctions (read-line) (write-line), cela est vrai aussi pour (prin1) (princ) (print) (write-char) (read-char), ne peuvent se faire que sous la forme séquentielle dans un fichier ouvert.

 

Donc pour faire ce que tu veux, cela oblige à lire intégralement le fichier, puis après l'ordonner en mémoire et réécrire l'ensemble.

 

Cette lecture et écriture intégrale peut être pénalisante en temps de traitement sur de gros fichiers.

 

Pour faire ce que veux, il faudrait se tourner vers la liaison excel en colonnes et rangées.

Voir les liaisons sous excel en lisp sur le blog de patrick_35, par exemple Api_xls v2.00

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

ok c'est bien ce que je pensait.

 

Cette lecture et écriture intégrale peut être pénalisante en temps de traitement sur de gros fichiers.

C'est un peut ça qui me génait mais on verra par la suite et si c'est vraiment long j essayerai avec les liaisons sous excel.

 

Merci pour ta réponse

 

@+

Posté(e)

Salut

 

Tu peux regarder l'objet "ADODB.Stream" qui permet de faire des lectures/écritures directe, aussi bien binaire que texte, mais c'est assez ardu

Un exemple pour lire une partie ou tout un fichier binaire.

 

  ; Lecture d'un fichier binaire
 ; Merci à highflyingbird
 ; Trouvé sur TheSwamp.org
 ; http://www.theswamp.org/index.php?topic=36656.msg417089#msg417089
 ; Modifié par Patrick_35 pour positionner le début de la lecture et la longueur à lire
 ; ReadBinary (fichier position longueur)
 ; Exemple  : (readbinary "c:/toto.bmp" 10 23)   pour une lecture partiel
 ; Exemple  : (readbinary "c:/toto.bmp" 10 nil)  pour une lecture partiel à partir de et jusqu'a la fin du fichier
 ; Exemple  : (readbinary "c:/toto.bmp" nil nil) pour lire tout le fichier
 ; Résultat : Une chaine de texte en hexa (ex : "4DE50800FF")

 (defun readbinary (fichier position longueur / str wsObj)
   (setq wsObj (vlax-create-object "ScriptControl"))
   (or position
     (setq position 0)
   )
   (if (or (not longueur) (zerop longueur))
     (setq longueur (- (vl-file-size fichier) position))
   )
   (vlax-put wsObj "language" "VBS")
   (setq str
     (strcat
      "Function ReadBinary(fichier)
Const adTypeBinary = 1
Dim stream, xmldom, node
Set xmldom = CreateObject(\"Microsoft.XMLDOM\")
Set node = xmldom.CreateElement(\"binary\")
node.DataType = \"bin.hex\"
Set stream = CreateObject(\"ADODB.Stream\")
stream.Type = adTypeBinary
stream.Open
stream.LoadFromFile fichier
stream.Position = " (itoa position) "
node.NodeTypedValue = stream.Read(" (itoa longueur) ")
stream.Close
Set stream = Nothing
ReadBinary = node.Text
Set node = Nothing
Set xmldom = Nothing
End Function"
     )
   )
   (vlax-invoke wsObj 'ExecuteStatement str)
   (setq str (vlax-invoke wsObj 'run "ReadBinary" fichier))
   (vlax-release-object wsObj)
   str
 )

 

Mais le plus simple est la méthode de Bonus

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité