FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Form(résolu)
Ecriture dans un fichier binaire Emptypar leclode Hier à 17:59

» trop de fichiers en cours
Ecriture dans un fichier binaire Emptypar Marc Hier à 11:42

» Bataille navale SM
Ecriture dans un fichier binaire Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Une calculatrice en une ligne de programme
Ecriture dans un fichier binaire Emptypar jean_debord Ven 26 Avr 2024 - 8:01

» Gestion d'un système client-serveur.
Ecriture dans un fichier binaire Emptypar Pedro Jeu 25 Avr 2024 - 19:31

» Les maths du crocodile
Ecriture dans un fichier binaire Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Ecriture dans un fichier binaire Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Ecriture dans un fichier binaire Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
Ecriture dans un fichier binaire Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Ecriture dans un fichier binaire Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Ecriture dans un fichier binaire Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
Ecriture dans un fichier binaire Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Ecriture dans un fichier binaire Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
Ecriture dans un fichier binaire Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
Ecriture dans un fichier binaire Emptypar jjn4 Jeu 4 Avr 2024 - 14:42

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
-45%
Le deal à ne pas rater :
WHIRLPOOL OWFC3C26X – Lave-vaisselle pose libre 14 couverts – ...
339 € 622 €
Voir le deal

 

 Ecriture dans un fichier binaire

Aller en bas 
5 participants
AuteurMessage
Mumu




Nombre de messages : 176
Localisation : 45
Date d'inscription : 20/12/2012

Ecriture dans un fichier binaire Empty
MessageSujet: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire EmptyLun 25 Fév 2013 - 12:20

Bonjour les Panoramicien(ne)s.

Je rencontre un petit problème.
Je voudrais écrire des données dans un fichier binaire, mais à chaque fois que je l'ouvre en écriture, Poanoramic me l'écrase et m'en crée un nouveau, vide celui-là...
Normal c'est ce que fait filebin_open_write d'après la doc.
C'est une action que je peux faire avec les fichiers texte avec file_open_append, mais le mode append n'existe visiblement pas en binaire.
Je sèche..
Quelqu'un aurait-il une idée ?
Merci
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Ecriture dans un fichier binaire Empty
MessageSujet: Re: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire EmptyLun 25 Fév 2013 - 13:12

Je ne me suis jamais penché sur le problème, mais je pense que la bonne méthode serait:
1/ Lire le fichier et charger son contenu actuel
2/ Modifier les données (modification ou ajout)
3/ Ecrire le fichier binaire

Il doit y avoir d'autres solutions, mais c'est la plus simple et elle doit répondre à pas mal d'usages courant (en dehors des gros fichiers) dans un temps raisonnable.

Sinon, tu peux aussi faire:
Code:

dim taille%

rem ouvrir un fichier binaire en lecture
file_open_read 1,"test"

rem lire la taille du fichier
taille% = filebin_size(1)

rem se positionner à la fin
filebin_position 1,taille%

rem écrire ce que tu veux (40 dans notre exemple)
filebin_write 1,40

rem fermer le fichier
filebin_close 1
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Ecriture dans un fichier binaire Empty
MessageSujet: Re: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire EmptyLun 25 Fév 2013 - 13:47

La seule solution, comme dit Jicehel, c'est de lire entièrement le fichier dans un tableau avec Filebin_Block_Read, de travailler dans ce tableau, puis de réécrire entièrement le tableau dans un fichier (le même ou un autre).
Ca peut mettre quelques secondes pour un très long fichier (> 1M) mais c'est supportable.
Code:
DIM v%(2000000): ' à dimension en fonction de la taille maxi des fichiers
FILEBIN_OPEN_READ 1, f$
sz% = FILEBIN_SIZE(1)
FILEBIN_BLOCK_READ 1,sz%,v%(0)
FILEBIN_CLOSE 1
'... modification des données du tableau ...
' ... mise à jour de sz% si taille modifiée
FILEBIN_OPEN_WRITE 1, f$
FILEBIN_BLOCK_WRITE 1,sz%,v%(0)
FILEBIN_CLOSE 1
Je ne vois pas d'autre solution.
(en FreeBasic on peut lire (et réécrire) entièrement un fichier, y compris binaire, dans une seule chaîne de caractères)

Edit: je crois bien qu'on s'est croisés Jicehel... effectivement, pour le cas que tu traites, c'est à dire ajouter des données, ta solution est la plus évidente. Et c'est bien ce que semble vouloir faire Mumu, ajouter des données.
Revenir en haut Aller en bas
Mumu




Nombre de messages : 176
Localisation : 45
Date d'inscription : 20/12/2012

Ecriture dans un fichier binaire Empty
MessageSujet: Re: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire EmptyLun 25 Fév 2013 - 15:04

Merci pour la rapidité de réponse.

La copie du fichier dans un tableau d'entiers, j'y ai pensé mais je ne trouvais pas ça élégant... Encore que là on pourrait même envisager d’insérer des données au milieu du fichier.
Moi têtu. Moi voulais travailler sur le fichier directement...!
La 2ème solution que Jicehel propose présente un inconvénient de taille. le fichier "test" est ouvert en lecture. La réaction de Panoramic est épidermique et non moins compréhensible : file number not use for writing ! Evil or Very Mad
Bon.. ben pour le moment je vais travailler sur des tableaux.

Merci encore et à bientôt
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Ecriture dans un fichier binaire Empty
MessageSujet: Re: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire EmptyLun 25 Fév 2013 - 15:19

Excuses moi, je le fais de tête comme je ne peux pas programmer du boulot. Il faut fermer le fichier et le réouvrir en écriture, mais j'ai oublié de mettre les 2 lignes.
Ca donne ça:
Code:
dim taille%

rem ouvrir un fichier binaire en lecture
file_open_read 1,"test"

rem lire la taille du fichier
taille% = filebin_size(1)

rem fermer le fichier
filebin_close 1

rem ouvrir un fichier binaire en écriture
file_open_write 1,"test"

rem se positionner à la fin
filebin_position 1,taille%

rem écrire ce que tu veux (40 dans notre exemple)
filebin_write 1,40

rem fermer le fichier
filebin_close 1
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Ecriture dans un fichier binaire Empty
MessageSujet: Re: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire EmptyLun 25 Fév 2013 - 15:50

Je comprends ta réaction Mumu, ça me choque aussi de mettre tout un fichier dans un tableau (un élément de tableau par octet, ça fait un peu gaspillage), mais bon, si c'est assez rapide et qu'on a la mémoire disponible, au diable l'avarice !
J'aurais préféré la méthode freebasic, tout le fichier dans une chaîne (la lecture est instantanée), et après on fait ce qu'on veut avec la chaîne, puis on réécrit.
Il y a aussi le Filebin_Hexa_Read, mais c'est un peu lourd à manipuler, et là la lecture est limitée à 2000 octets, alors autant oublier.
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Ecriture dans un fichier binaire Empty
MessageSujet: Re: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire EmptyLun 25 Fév 2013 - 16:42

Sinon, il y a aussi le système par blocs (ça dépend de l'usage)
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Ecriture dans un fichier binaire Empty
MessageSujet: Re: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire EmptyLun 25 Fév 2013 - 17:39

Par blocs, tu veux bien dire dans un tableau, comme dit ci-dessus ? (Filebin_Block_Read et Write) je ne vois rien d'autre...

Il faudrait pouvoir charger tout le fichier d'un seul coup dans une espèce de Dlist en binaire (une zone mémoire, un buffer en fait)... comme pour les fichiers texte, et bricoler après en mémoire avec un indice, avant réécriture. Ce serait bien moins lourd que dans un tableau. Et on pourrait accéder à des zones entières continues, pas comme avec un tableau.
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Ecriture dans un fichier binaire Empty
MessageSujet: Re: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire EmptyLun 25 Fév 2013 - 18:13

Mon deuxième source ne fonctionne pas ?
Je pense qu'il le devrait, j'avais juste oublié de noter la fermeture et la réouverture du fichier pour pouvoir écrire dedans, mais en toute logique, il devrait fonctionner dans la version corrigée.
Sinon pour les Blocks, c'est ça, c'est le système du tableau de valeurs.
Ca peut répondre à certains besoins. Je n'en connais pas assez sur l'usage attendu pour voir ce qui conviendrait le mieux.
Après sinon, il y a la sauvegarde dans un fichier non binaire qui peut répondre à beaucoup d'autres besoins, même pour le stockage de valeurs binaires (codées ou non sous forme héxadécimales)
Donc Mumu, si ça ne convient pas à ton usage dis nous en un peu plus sur ce que tu souhaites faire que l'on te propose une solution qui conviennent le mieux possible à ton usage souhaité.
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Ecriture dans un fichier binaire Empty
MessageSujet: Re: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire EmptyLun 25 Fév 2013 - 18:35

Ben, ton 2ème source est bizarre.
1) tu récupères la taille du fichier (filebin_open... au lieu de file_open, mais c'est un détail) et tu fermes, ok
2) tu ouvres ce fichier 'test' en écriture, mais ceci va créer un nouveau fichier, vide (voir la doc) ! tu ne peux pas te positionner en 'taille%' dedans puisqu'il est vide, à mon avis ou tu auras une erreur, ou ta donnée '40' va s'écrire au début, et tu auras détruit ton fichier d'origine au moment de la fermeture.
Il n'y a pas d'append possible dans ce cas.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Ecriture dans un fichier binaire Empty
MessageSujet: Re: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire EmptyLun 25 Fév 2013 - 19:14

Je suis en train de réaliser les fonctions dont tu as besoin. Quelques heures de patience...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jack
Admin
Jack


Nombre de messages : 2381
Date d'inscription : 28/05/2007

Ecriture dans un fichier binaire Empty
MessageSujet: Re: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire EmptyLun 25 Fév 2013 - 20:43

Le fait qu'il n'est pas possible de modifier un fichier binaire est une lacune que je vais corriger.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Ecriture dans un fichier binaire Empty
MessageSujet: Re: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire EmptyLun 25 Fév 2013 - 20:46

Gloups, tu as raison JL35, je ne m'en rappelais plus... désolé...
Donc en effet, forcément chargement puis réecriture ou utilisation de la DLL de Klaus en attendant que les fonctions soient ajoutées dans Panoramic nativement.
On s'est croisé Jack. Si Jack le met dans ses priorités, ça fait que va être rapide Wink
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Ecriture dans un fichier binaire Empty
MessageSujet: Re: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire EmptyLun 25 Fév 2013 - 20:56

Ça Jack c'est une bonne nouvelle, j'ai souvent regretté ce manque dans Panoramic ( et d'être obligé à des acrobaties, ou de le faire sous-traiter par un autre langage).
Revenir en haut Aller en bas
Mumu




Nombre de messages : 176
Localisation : 45
Date d'inscription : 20/12/2012

Ecriture dans un fichier binaire Empty
MessageSujet: Re: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire EmptyLun 25 Fév 2013 - 22:52

Houlà !!!
Il n'entrait pas dans mes intentions de donner un coup de pied dans une fourmilière !!
Merci à tous de manifester un tel intérêt pour mes petits soucis.
Effectivement, un filebin_open_write détruit le fichier. Alors j'étais parti (et pas encore arrivé) dans des développement "abracadabrantesques"...
Mais si une commande doit voir le jour, qui règle élégamment le problème, je saurai me montrer patient.
Merci encore à tous Very Happy
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Ecriture dans un fichier binaire Empty
MessageSujet: Re: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire EmptyLun 25 Fév 2013 - 23:03

Comme quoi, tu vois qu'il ne faut pas hésiter à intervenir, ça va servir à tout le monde (toutes les fourmis) !

Tu peux toujours utiliser une solution de secours, en attendant, histoire de faire avancer ton schmilblick, quitte à la remplacer après, parce qu'on ne peut pas savoir quand ce sera fait, ça dépendra des disponibilités de Jack.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Ecriture dans un fichier binaire Empty
MessageSujet: Re: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire EmptyLun 25 Fév 2013 - 23:45

J'ai mis ma solution en ligne. Voir ici pour plus d'informations.

Et voici un programme de démo. Il peut fonctionner avec n'importe quel fichier, binaire ou texte. Il traite tout fichier comme s'il était binaire.
Code:
' demo_fichiers_binaires.bas

label lecture, creation, ajout

dim res%, buf$, nom$, i%

KGF_initialize("KGF.dll")

open_dialog 1
save_dialog 2

button 101 : top 101,10 : left 101,10 : caption 101,"Lecture"
  on_click 101,lecture
button 102 : top 102,40 : left 102,10 : caption 102,"Création"
  on_click 102,creation
button 103 : top 103,70 : left 103,10 : caption 103,"Ajout"
  on_click 103,ajout

memo 201 : top 201,10 : left 201,200 : width 201,300 : height 201,300

end

lecture:
  nom$ = file_name$(1)
  if nom$="_" then return
  ReadBinaryFileToString(nom$)
  clear 201
  item_add 201,ReadBinaryFileToString$
  return
 
creation:
  nom$ = file_name$(2)
  if nom$="_" then return
  if file_exists(nom$)=1
    message "Refusé."
    return
  end_if
  if count(201)=0
    message "Vide."
    return
  end_if
  buf$ = ""
  for i%=1 to count(201)
    buf$ = buf$ + item_read$(201,i%) + chr$(13) + chr$(10)
  next i%
  WriteStringToBinaryFile(nom$,buf$)
  return
 
ajout:
  nom$ = file_name$(1)
  if nom$="_" then return
  if count(201)=0
    message "Vide."
    return
  end_if
  buf$ = ""
  for i%=1 to count(201)
    buf$ = buf$ + item_read$(201,i%) + chr$(13) + chr$(10)
  next i%
  AppendStringToBinaryFile(nom$,buf$)
  return

#INCLUDE "KGF_SUB.bas"

Pour tester:
- utilisez d'abord le bouton "Lecture". Il lit un fichier binaire à choisir dans un dialogue d'ouverture, puis place son contenu dans un mémo. Evidemment, le résultat n'est lisible que si le fichier est un fichier texte.
- puis, utilisez le bouton "Création". Il crée un fichier binaire à partir du contenu du mémo.
- et finalement, modifiez le contenu du mémo et utilisez le bouton "Ajout". Sélectionnez le même fichier que celui créé à l'étape précédente, et le contenu du mémo sera ajouté à la fin du fichier choisi.

Bien sûr, cela est clairement visible si les fichiers choisis sont des fichiers textes. Mais si ce sont des fichiers binaires, le programme les traite exactement de la même manière.

EDIT

J'ai ajouté une fonction de remplacement d'octets à l'intérieur d'un fichier binaire. Plus d'infos
ici.

En-dessous du mémo, il y a des zones concernant le remplacement. Le bouton "Remplacement" utilise ces information pour modifier un fichier choisi dans un dialogue d'ouverture. Attention: les modifications sont permanentes, et le choix d'un fichier par erreur peut détruire ce fichier !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Ecriture dans un fichier binaire Empty
MessageSujet: Re: Ecriture dans un fichier binaire   Ecriture dans un fichier binaire Empty

Revenir en haut Aller en bas
 
Ecriture dans un fichier binaire
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Problème de lecture de fichier binaire.
» Lecture/écriture par blocs dans un fichier binaire
» Lecture / écriture dans un fichier texte
» Recherche d'une suite de valeurs dans un fichier binaire
» Problème de fichier binaire.

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: