Read Write Null Terminated String

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Read Write Null Terminated String

Message par Guimauve »

Bonjour à tous,

Voici deux petites instructions pour lire et écrire une chaîne de caractères Ascii se terminant par le caractère null ('\0'). J'ai eu besoin pour lire les chaînes de caractères présentes dans un fichier *.3ds et au passage j'ai ajouté la commande d'écriture. Je n'ai pas effectué de test particulièrement poussé mais elles semblent fonctionner autant en mode normal qu'en Unicode.

Edit : Suite à une remarque de la part de STARGATE sur le forum anglais, les deux procédures on pues être réduite à deux simple macros.

Faut dire que l'aide en Français mentionne que la commande ReadString() lit des caractères jusqu'à ce qu'un caractère de retour de chariot soit lu. Alors que dans l'aide en Anglais c'est un caractère "EndOfLine".

Pour moi un retour de chariot porte le numéro 13 et non 0 comme c'est le cas pour le caractère de fin de chaîne. J'ai donc perdu mon temps pour rien.

A+
Guimauve

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : Read Write Null Terminated String
; Nom du fichier : ReadNullTerminatedString.pb
; Version du fichier : 2.0.0
; Programmation : OK
; Programmé par : Guimauve
; Date : 08-02-2012
; Mise à jour : 08-02-2012
; Code PureBasic : 4.61
; Plateforme : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Macro WriteNullTerminatedString(FileID, String)
  
  WriteString(FileID, String, #PB_Ascii)
  WriteAsciiCharacter(FileID, 0)
  
EndMacro

Macro ReadNullTerminatedString(FileID)
  
  ReadString(FileID, #PB_Ascii)
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<< 
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<< 
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<< 
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 

NewList Texte.s()

AddElement(Texte())
Texte() = FormatDate("A=%yyyy, M= %mm, J=%dd - %hh:%ii:%ss", Date())

AddElement(Texte())
Texte() = "PureBasic 4.61 Beta 1"

AddElement(Texte())
Texte() = "FreeMat 4.0 (Similiaire à MatLab mais sans Simulink)"

AddElement(Texte())
Texte() = "PureBasic is the best programming language, period !"

AddElement(Texte())
Texte() = "Linux Mint 12 x64 + Gnome-Shell"

If CreateFile(0, "Test.bin")
  
  ForEach Texte()
    WriteNullTerminatedString(0, Texte())
  Next
  
  CloseFile(0)
  
EndIf

If ReadFile(1, "Test.bin")
  
  While Eof(1) = 0 
    Debug ReadNullTerminatedString(1)
  Wend
  
  CloseFile(1)
  DeleteFile("Test.bin")
  
EndIf

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<