Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Fin de lecture fichier prématurée [ Système / Fichier & Disque ] (PatDeLaYaute)

lundi 13 novembre 2006 à 21:46:57 | Fin de lecture fichier prématurée

PatDeLaYaute

Bonsoir tout le monde,

voilà j'ai une fonction qui lit un fichier texte, jusque là pas de problème, j'ai déclaré toutes mes variables, ouvert mon fichier, (voir code pour les septiques)

        F = FreeFile
        Open CheminAcces & TabFichierPRJ(i) For Input As #F

            G = FreeFile
            Open CheminAcces & "prjTmp\" & TabFichierPRJ(i) For Output As #G

            TextePRJtmp = ""

            Do While Not EOF(F)
                Line Input #F, Texte
                Texte = RTrim(Texte)

                If Trim(Texte) <> "" Then
                    If Mid(Texte, 1, 1) <> "'" Then
                        If InStr(1, Texte, "Begin VB.") = 0 Then
VerifSautDeLigne:
                            If Mid(Texte, Len(Texte), 1) = "_" Then
                                Line Input #F, TexteTmp
                                Texte = Mid(Texte, 1, Len(Texte) - 1) & TexteTmp
                                GoTo VerifSautDeLigne
                            End If
                        End If
                    End If
                End If

                Print #G, Texte

            Loop
        Close #F
        Close #G


Le problème c'est qu'arrivé à la ligne 4434 (sur les 5902) la boucle se termine ! et donc il me manque une bonne partie de mon fichier. Et ce problème n'apparait que sur un seul fichier! (le plus gros (276ko)
Je précise que même en supprimant la fonction présente dans la boucle le résultat est le même.

Si quelqu'un a une idée du problème.
Merci d'avance

PatDeLaYaute

lundi 13 novembre 2006 à 22:25:34 | Re : Fin de lecture fichier prématurée

dthuler

Réponse acceptée !

Salut,

Quel genre de fichier lis-tu, des fichiers ASCII ?
As-tu vérifié si ta ligne 4434 ne contient pas un caractère spécial ?
Quelle est sa particularité, as-tu essayé de l'effacer pour tester si ça passe ?

David


lundi 13 novembre 2006 à 23:32:22 | Re : Fin de lecture fichier prématurée

PatDeLaYaute

Salut David,

merci beaucoup, effectivement cette ligne ('Print #F, "�1A;") comporte un particularité. Il s'agit d'un caractère qui indique la fin d'un fichier, mais je ne pensais pas qu'il puisse avoir cet effet lors d'une simple lecture et surtout rencontré dans ce contexte.

Pour info je suis en train d'écrire une application pour traduire mon logiciel (post compliation) et donc je manipule les fichiers sources.

C'était bête comme chou, mais fallait y penser !

Merci

PatDeLaYaute

lundi 13 novembre 2006 à 23:34:20 | Re : Fin de lecture fichier prématurée

Renfield

Administrateur CodeS-SourceS

Je pense qu'effectivement cette ligne contient un caractère que VB interprete comme une fin de fichier....

le plus simple, surement, si tu ne peux pas agir sur le fichier d'entrée, est de le lire en entier (ou par blocs)
et de jouer avec, après, en mémoire... (plus de lecture ligne a ligne)

Renfield
Admin CodeS-SourceS- MVP Visual Basic

lundi 13 novembre 2006 à 23:39:30 | Re : Fin de lecture fichier prématurée

jack

Administrateur CodeS-SourceS
Salut
Non, les caractères spéciaux seraient lus, mal interprétables, mais lus (comme n'importe quel code ascii)
Je pense que ton problème vient du fait que tu lises une première ligne, mais que, à l'intérieur de ta boucle, tu lises à plusieurs reprises de nouvelles lignes dans le fichier.
Le "Not EOF(f)" ne fonctionnera que lorsque l'instruction Loop sera rencontrée.
Dans cette fameuse boucle de lecture interne, tu sautes avec un Goto à une ligne antérieure.
Le problème, c'est que cette ligne est à l'extérieur du If --> VB ne sait accumuler une cascade de 16 If-Then (il me semble)
Arrivé à cette limite, le programme se plante, et ma boule de cristal me dit que tu as un "On Error Resume Next" quelque part ...
Essaye de remplacer le If-Goto-EndIf par un Do While - Loop, ça t'obligera à équilibrer les syntaxes qui marchent par couple, un truc du genre :
   If InStr(1, Texte, "Begin VB.") = 0 Then
      Do While Mid(Texte, Len(Texte), 1) = "_"
         Line Input #F, TexteTmp
         Texte = Mid(Texte, 1, Len(Texte) - 1) & TexteTmp
      Loop
   End If

Et, pour info :
Mid(Texte, Len(Texte), 1) --> Right(Texte, 1)
Mid(Texte, 1, Len(Texte) - 1) ---> Left(Texte, Len(Texte) - 1)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on

lundi 13 novembre 2006 à 23:57:53 | Re : Fin de lecture fichier prématurée

PatDeLaYaute

Que de réponses,

Le problème maintenant est résolu, car le caractère incriminé étant dans un ligne de code mise en commentaire, je l'ai donc supprimé et plus de soucis.

Jack => merci pour la limite de 16 If que je ne connaissais pas et l'optimisation du code!
Je serais pointilleux je mettrais une boucle au lieu du if et du saut, en même temps cette fonction permet de ramener à une seule et unique ligne les codes que l'on écrit sur plusieurs lignes avec un _ , je crois que rare sont ceux qui fassent des lignes de codes aussi longues !
Ah et si je peux me permettre, il faudrai donner un petit coup de chiffon sur ta boule de cristal , car je n'ai aucun "on error resume next" dans ma fonction, je n'aime pas trop cette instruction.

Merci a tous

PatDeLaYaute



Cette discussion est classé dans : fichier, problème, input, end, texte


Répondre à ce message

Sujets en rapport avec ce message

extraction des information d'un fichier [ par pegguy ] Private Sub Form_Load()'0n Error Resume Next 'Les erreurs sont ignorees'Open "c:\it\stat\STAT01-05 2001\stat26e.txt" For Input As #1Open "c:\it\stat\S extraction des information d'un fichier [ par pegguy ] Private Sub Form_Load()'0n Error Resume Next 'Les erreurs sont ignorees'Open "c:\it\stat\STAT01-05 2001\stat26e.txt" For Input As #1Open "c:\it\stat\S extraction des information d'un fichier [ par pegguy ] Private Sub Form_Load()'0n Error Resume Next 'Les erreurs sont ignorees'Open "c:\it\stat\STAT01-05 2001\stat26e.txt" For Input As #1Open "c:\it\stat\S Problème de virgule... [ par gmni ] Salut,Voici le code que j'utilise pour afficher le contenu d'un fichier texteligne par ligne dans une ListBox :########################Dim Ligne As St Encore un drole de fichier texte [ par crocmorts ] 1ere ligne :" DATE ","HEURE"," POSTE","NU.COMPOSE"," ANNUAIRE EXTERNE ","DUREE DE","DUREE DE C"2eme ligne:"01/05/02","01:08","201 ","6 Lire un fichier texte à partir d'une certaine ligne [ par crocmorts ] Salut, voila mon probleme, je souhaiterais lire un fichier texte à partir d'une ligne X. J'ai recherché ds le forum mais j'ai pas trouvé mon bonheur. Problème string fichier texte [ par Juliendu88 ] Bonjour j'ai un gros problème avec un fichier texte qui contient des lignes de 134 caractères, jessaie de lire ligne par ligne en mettant chaque ligne Fichier texte [ par xavier77 ] Salut, J'ouvre un fichier texte et je le lie ligne par ligne : NumFichier = FreeFileOpen App.Path & "\toto.txt" For Input As #NumFichierDo While EO virgule dans fichier texte -> Va à la ligne ??? [ par globule ] Bonjour,J'ouvere un fichier texte (j'ai besoin d'analyser ligne par ligne ce fichier)Open "c:\monFichier" For Input As #1Do While Not EOF(1) Input Convertir un fichier ASCII [ par darkbol ] Bonjour, j'aimerais savoir comment d'un fichier ascii type : !Coordinate System: ! Projection System ID: 0 Initialized Quick: 0! Secondary Horizonta


Nos sponsors

Sondage...

CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,608 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.