Fichier compreneant texte et image

Résolu
cs_moi4975 Messages postés 109 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 17 juillet 2007 - 6 avril 2006 à 13:27
cs_moi4975 Messages postés 109 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 17 juillet 2007 - 8 avril 2006 à 16:45
Salut à tous,

Voila j'ai cherché sur le forum mais je n'ai rien trouver !

Je réalise un programme de gestion de dvd et je voudrais créer un fichier qui contient du texte (Titre, Réalisateur,...) et l'image du film ! Tous ça dans le même fichier !

J'ai déja réussit à créer un fichier avec le texte mais pas l'image !

[T]Le Seigneur des anneaux
[R]Réalisateur...
[D]145
[X]22/08/1893
[P]Usa

Voila à quoi ressemble mon fichier mais comment puis-je insérer une image là dedans ??????

Mon programme ouvrirait le fichier récupererait le texte et créerait un nouveau fichier image avec les informations du fichier ouvert !!

merci de m'aider

10 réponses

Schlangan Messages postés 47 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 11 décembre 2007
6 avril 2006 à 15:25
Bonjour.

Il existe une méthode un petit peu compliquée.

Tout d'abord inscris tes instructions comme tu l'as fait auparavant.
Puis ensuite, il faut que tu ouvres le fichier image et que tu copies toutes les données du fichier image dans ton fichier, à la suite des données texte.

Procède comme ceci :

Open tonfichier For Output As #1
Write #1, titre, réalisateur '... ce sont tes données texte
Open lefichierimage For Binary As #2
Print #1, Input(LOF(2),2) 'si l'instruction input c'est Input(Length, file) sinon inverse
Close #2
Close #1

Ainsi ton fichier va contenir exactement le fichier image.

Ensuite pour le lire, il suffira que tu crées un fichier à part afin de recréer l'image pour pouvoir ensuite la lire :

Open tonfichier For Input As #1
Input #1, titre, réalisateur '... tes données texte
Open fichiertmpimage For Output As #2
Print #2, Input(LOF(1)-Seek(1),1) 'inverse si c'est dans l'autre sens
Close #2
Close #1
Et pour finir : Picture1.Picture=Loadpicture(fichiertmpimage)
3
Schlangan Messages postés 47 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 11 décembre 2007
8 avril 2006 à 16:30
Il reste encore une solution qui vient de me revenir.


Récupère tout d'abord tes données comme tu avais fait. Mais ensuite ferme le fichier.


Il faudra ensuite que tu réouvres le fichier mais non plus en mode Input mais en mode Binary !
C'est comme ça que tu pourras récupérer toutes les données avec la méthode que je t'ai indiqué !


Ça devrait donner :


Private Sub cmdOuvrir_Click()
Dim Fichier1 As String
Dim a As String
Dim Ligne As String
Fichier1 ="C:\Film.txt"
Open Fichier1 For Input As #1
Input #1, a
For x = 1 To Val(a)
Input #1, a
MsgBox (a)
Next
temp_pos = Seek(1)
Close #1
Open Fichier1 For Binary As #1
Seek #1, temp_pos
Open "C:\NouvelleImage.jpg" For Output As #2
Print #2, Input(LOF(1) - (Seek(1) + 1), 1)
Close #2
Close #1
Picture1.Picture = LoadPicture("C:\NouvelleImage.jpg")
End Sub

Cette fois-ci ça devrait marcher... Enfin j'espère...
3
cs_moi4975 Messages postés 109 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 17 juillet 2007
6 avril 2006 à 20:14
Merci l'ecriture du fichier fonctionne très bien mais lors de la lecture du fichier et de l'écriture de l'image.

Open Fichier For Input As #1
Open "C:\Image.jpg" For Output As #2
Print #2, Input(LOF(1) - Seek(1), 1)
Close #1
Close #2

la ligne Print #2, Input(LOF(1) - Seek(1), 1) renvoit une erreur !

'erreur' d'exécution n°62
L'entrée dépasse la fin de fichier

Pouvez vous m'aider ? Que dois-je faire pour corriger ça ?
0
Schlangan Messages postés 47 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 11 décembre 2007
8 avril 2006 à 14:53
Et bien cela signifie que le programme essaie de lire une longueur de fichier supérieure à la longueur de l'image. Dans ce cas, il suffit peut être de mettre :
Print #2, Input(LOF(1)- (Seek(1)+1),1).

Le Seek(1) sert normalement à indiquer la position de lecture dans le fichier. Si on essaie de lire la longueur totale moins la position du fichier, on devrait normalement obtenir le fichier image. Mais il se peut qu'il y ait un problème de décalage d'un octet. C'est pourquoi essaie de transformer la ligne comme je l'ai indiqué. Si cela ne marche toujours pas, renvoie un message et j'essaierai chez moi (j'ai pas Internet chez moi, donc je viens sur ce site au Cyberlocal, où il n'y a pas Visual basic).
0

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

Posez votre question
cs_moi4975 Messages postés 109 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 17 juillet 2007
8 avril 2006 à 15:36
Non ça ne marche toujours pas ! J'ai toujours ce laid message d'erreur !

Voici mon code :

Private Sub cmdCréer_Click()
Dim Fichier1 As String
Dim Fichier2 As String
Fichier1 = "C:\Film.txt"
Fichier2 = "C:\ImageOrigine.jpg"
Open Fichier1 For Output As #1
Open Fichier2 For Binary As #2
Write #1, "10"
Write #1, txtTitre.Text
Write #1, txtRealisateur.Text
Write #1, txtDuree.Text
Write #1, txtDate.Text
Write #1, txtPays.Text
Write #1, txtActeur.Text
Write #1, txtCotation.Text
Write #1, txtGenre.Text
Write #1, txtFormat.Text
Write #1, txtSupport.Text
Write #1, Input(LOF(2), 2)
Close #2
Close #1
End Sub


Private Sub cmdOuvrir_Click()
Dim Fichier1 As String
Dim a As String
Dim Ligne As String
Fichier1 ="C:\Film.txt"
Open Fichier1 For Input As #1
Open "C:\NouvelleImage.jpg" For Output As #2
Input #1, a
For x = 1 To Val(a)
Input #1, a
MsgBox (a)
Next
Print #2, Input(LOF(1) - (Seek(1) + 1), 1)
Close #2
Close #1
Picture1.Picture = LoadPicture("C:\NouvelleImage.jpg")
End Sub

C'est gentil de m'aider !
0
Schlangan Messages postés 47 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 11 décembre 2007
8 avril 2006 à 15:59
J'ai trouvé une solution !
Il suffit que dans ton fichier tu ajoutes la longueur du fichier image dans tes données
Rajoute après Write #1, txtSupport.Text le code Write #1, LOF(2)


Puis pour ouvrir le fichier, remplace Print #2, Input(LOF(1) - (Seek(1) + 1), 1) par les
trois lignes suivantes :

Input #1, length_image
Seek #1, LOF(1)-(length_image-1)
Print #2, Input(length_image,1)


J'espère que ça va marcher ; je suis toujours au cyberlocal !
0
cs_moi4975 Messages postés 109 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 17 juillet 2007
8 avril 2006 à 16:09
Voila he ben c'est toujours le même problème :

Print #2, Input(length_image, 1)

Pose un problème de longueur.
0
Schlangan Messages postés 47 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 11 décembre 2007
8 avril 2006 à 16:13
Tu es sûr que l'écriture du fichier marche bien ? Parce que le problème peut venir de là aussi.
0
cs_moi4975 Messages postés 109 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 17 juillet 2007
8 avril 2006 à 16:23
Oui mon fichier texte contient toute les données (Titre,relisateur,etc) et puis il contient du texte (illisible) .Mais ce texte est sur plusieurs ligne et contient des virgules peut-etre que cela peut poser problème avec Input non ?

Ce code me donne une image parfaite

Open "C:\Image.txt" For Output As #1
Open Text2.Text For Binary As #2
Print #1, Input(LOF(2), 2)
Close #2
Close #1
Name "C:\Image.txt" As "C:\Image.jpg"

Je ne comprend pas pourqoui ma méthode pose problème
0
cs_moi4975 Messages postés 109 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 17 juillet 2007
8 avril 2006 à 16:45
Merci beaucoup ! Ca fonctionne ! J'ai simplement du enlever le ligne

Write #1, LOF(2) lors de la création du fichier !!!!
0
Rejoignez-nous