Page 1 sur 2

Problème fichier incompréhensible...

Publié : lun. 27/mai/2019 20:35
par Shadow
Salut,

Tester ce code simple comme bonjour:

Code : Tout sélectionner

Fichier$ = ""

If ReadFile(1, "votre fichier.pb") ; Si le fichier peut être lu , on continue...
  While Eof(1) = 0                                       ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File') 
    Fichier$ + ReadString(1) + Chr(13) + Chr(10)         ; Affiche ligne par ligne le contenu du fichier
  Wend
  CloseFile(1) ; Ferme le fichier précédemment ouvert
Else           ; Sinon ont affiche un message d'avertissement
  MessageRequester("Information","Impossible d'ouvrir le fichier !")
EndIf

Debug Fichier$ + Chr(13) + Chr(10)
Remplacer "votre fichier.pb" par un fichier à vous.
Evidemment le fichier devra être au même endroit que votre code.

Ok, maintenant go, puis copier le contenue du débogueur avec le bouton "Copier tous"
Coller dans un nouveau code sur PB, tester, surprise !

Bug !

En faite ça viens je suppose, d'un caractère invisible et inconnue en début de fichier !
Tester sous PB: 5.71 beta 1 LTS x 64 bit.

Et vous ça le fait aussi ?

Re: Problème fichier incompréhensible...

Publié : lun. 27/mai/2019 22:16
par Ar-S
En 5.6x et 5.70 je n'ai pas de bug.
Je ne vais pas installer la beta 1 pour tester ça. Si quelqu'un d'autre veut tester.

Re: Problème fichier incompréhensible...

Publié : mar. 28/mai/2019 5:08
par Ollivier
Moi aussi j'ai la flemme alors l'auteur du sujet va insérer la ligne suivante

Code : Tout sélectionner

BOM = ReadStringFormat(1)
juste avant son << While >> et considérer qu'il faut le faire tout le temps à chaque départ d'un fichier texte à lire pour des raisons de compatibilité.

Re: Problème fichier incompréhensible...

Publié : mar. 28/mai/2019 7:57
par Marc56
1. « Bug ! » n'est pas un message d'erreur. Veuillez préciser le message exact.
2. ReadFile et ReadString gèrent parfaitement les lectures de fichiers avec ou sans BOM sans avoir à ajouter de paramètre.
3. Cause possible: fichier verrouillé car ouvert par un autre processus. Utiliser #PB_File_SharedRead pour éviter cela (Windows)

(Testé 5.70 et 5.71 B1)

Re: Problème fichier incompréhensible...

Publié : mar. 28/mai/2019 11:40
par Ollivier
@Marc56

Tu as raison de préciser que ce n'est pas un bug. Cependant une boucle Read#Qqch() peut échouer si le BOM n'est pas traité initialement. Er ReadStringFormat() est conçu pour adapter le pointeur de fichier correctement qu'il y ait ou non un BOM. D'où ma très vive recommandarion de placer ReadStringFormat().

Re: Problème fichier incompréhensible...

Publié : mar. 28/mai/2019 12:23
par Shadow
Salut,

Je crois qu'on ne sait pas bien compris.
Avec mon code sans le toucher, mettez votre nom de fichier (un fichier PB code sans erreur), lancez le code et copier tous dans le débogueur.
Sur PB faites "nouveau", collez le code, tester:

Erreur de syntaxe ligne 1, alors que non !
C'est bien un bug !

Je teste avec LTS attention !
Merci à vous.

Re: Problème fichier incompréhensible...

Publié : mar. 28/mai/2019 13:02
par Ar-S
Marc56 a pourtant mis testé avec 5.71 b1

Re: Problème fichier incompréhensible...

Publié : mar. 28/mai/2019 13:13
par Marc56
Trouvé.
Oui, en ouvrant en hexa le fichier, on trouve alors 2 BOM consécutifs

EF BB BF EF BB BF

Raison: Quand tu copie/colle le contenu de la fenêtre du debug, dans une fenêtre vide, PB ajoute un deuxième caractère BOM (éditeur) à celui du contenu (copié/collé).
Si le contenu est un fichier source PB UTF-8 alors il a déjà un BOM qui vient s'ajouter à celui de la fenêtre debug.

Bug, oui, mais c'est pas tout le monde qui va lire un code source pour recopier le contenu depuis la fenêtre output :wink:

Re: Problème fichier incompréhensible...

Publié : mar. 28/mai/2019 14:02
par case
pas du tout un bug car il me semble logique que pb vas pas vérifier tout ce qui est collé dans l'éditeur... c'est au colleur de vérifier que ce qu'il colle n'est pas susceptible de buguer.

Re: Problème fichier incompréhensible...

Publié : mar. 28/mai/2019 14:10
par Shadow
Toi te manque une "case" :lol: (humour)
Je suis pas d'accord avec toi Mr case !

Si je copie mon code depuis le débogueur et que je le colle dans PB, normalement il n'est pas censé avoir ce genre de truc !
Après, je suppose que quand je lis le fichier, le BOM est conserver, d'ou cette erreur !

Bref, Merci Marc56 !
Jvé creusé !

Re: Problème fichier incompréhensible...

Publié : mar. 28/mai/2019 14:35
par Ar-S
c'est pas tout le monde qui va lire un code source pour recopier le contenu depuis la fenêtre output
Qui (à part shadow) fait ça ? Et surtout pourquoi.. ? (vraie question)

Re: Problème fichier incompréhensible...

Publié : mar. 28/mai/2019 14:47
par Shadow
Pour test, car en vraie je lis le code du fichier, je le
met dans une variable puis je le compile ensuite !

J'ai résolut mon soucis en mettant ReadStringFormat(0) mais je ne suis pas sur que se soit réglé pour autant !:

Code : Tout sélectionner

If ReadFile(0, "Gadget Wiever Gestion Edition Gaget.pb", #PB_UTF8)
  ReadStringFormat(0)
  length = Lof(0) ; Lit la taille en octets du fichier 
  *MemoryID = AllocateMemory(length) ; alloue un bloc mémoire de la taille du fichier "length"
  If *MemoryID                       ; si l'allacation a bien fonctionner ont continue
    ReadData(0, *MemoryID, length)   ; Lit les données du fichier et les place dans le bloc m�moire "*MemoryID" de la taille correspondant à "length"
    Code$ = PeekS(*MemoryID, length, #PB_UTF8) + #CRLF$ + #CRLF$
  EndIf
  CloseFile(0)
EndIf

Re: Problème fichier incompréhensible...

Publié : mar. 28/mai/2019 15:01
par Marc56
Lire un fichier texte peut se faire sans pointeur ("Less is more")

Code : Tout sélectionner

If ReadFile(0, "Gadget Wiever Gestion Edition Gaget.pb")
    ReadStringFormat(0) ; Déplacera le pointeur après le BOM s'il en trouve un 
    While Not Eof(0)
        Code$ = ReadString(0, #PB_File_IgnoreEOL)
    Wend    
    CloseFile(0)
    ; SetClipboardText(Code$) si on veut le mettre dans le presse-papier
Else
    MessageRequester("Erreur", "Ne peut lire le fichier source")
EndIf
Et si tu veux sauver le contenu de la fenêtre debug sans ajouter un BOM, il y a SaveDebugOutput()

Re: Problème fichier incompréhensible...

Publié : mar. 28/mai/2019 15:41
par Shadow
Ah ok, merci encore Marc56 :)

Re: Problème fichier incompréhensible...

Publié : mar. 28/mai/2019 19:08
par Mindphazer
Shadow a écrit :Jvé creusé !
Tu pousses, tu creuses... tu fais quoi d'autre de passionnant ?