Page 1 sur 1

[R] Lecture d'un caractère précis dans un fichier

Posté : jeu. 28 févr. 2008 19:49
par tolf
Bonsoir,

je voudrais lire un caractère précis dans un fichier, en connaisant son rang dans le fichier : existe-t-il une fonction pour le faire.

Merci d'avance

Re: [..] Lecture d'un caractère précis dans un fichier

Posté : jeu. 28 févr. 2008 21:03
par Tlem
Qu'entendez vous par : 'son rang' ?

Re: [..] Lecture d'un caractère précis dans un fichier

Posté : ven. 29 févr. 2008 13:55
par tolf
Par "son rang", j'entend sa position dans le fichier. Par exemple, dans le fichier suivant :

Code : Tout sélectionner

ABCD
"A" est le caractère de rang 1, "B" celui de rang 2, etc...

Re: [..] Lecture d'un caractère précis dans un fichier

Posté : ven. 29 févr. 2008 15:41
par Tlem
Si c'est pour utilisez comme vous l'indiquez, alors utilisez ceci :

Code : Tout sélectionner

FileRead ( filehandle or "filename" [, count] )
et donc pour lire le 4ieme caractère du fichier test.txt :

Code : Tout sélectionner

FileRead ( "test.txt", 4)

Re: [..] Lecture d'un caractère précis dans un fichier

Posté : ven. 29 févr. 2008 16:27
par tolf
Bonjour,

J'ai consulté l'aide et pour le paramètre "count", ils disent :

Code : Tout sélectionner

[optional] The number of characters to read. Default read the entire file. Not optional for file in raw reading mode
et "The number of characters to read" veut dire "Le nombre de caractères à lire" et non pas "Le numero du caractère à lire".
J'ai testé l'exemple et en fait, "count" correspond au nombre de caractères à lire :
- depuis le début si on utilise :

Code : Tout sélectionner

FileRead($filename)
- après le dernier caractère lu si on utilise :

Code : Tout sélectionner

$file = FileOpen($filename)
FileRead($file)
Donc la fonction "FileRead" ne permet pas de lire un caractère précis.
En revanche, j'ai trouvé un autre moyen :

Code : Tout sélectionner

StringMid(FileRead($filename), $numero, 1)

Re: [..] Lecture d'un caractère précis dans un fichier

Posté : ven. 29 févr. 2008 17:08
par Tlem
tolf a écrit :Donc la fonction "FileRead" ne permet pas de lire un caractère précis.
Exacte, j'ai été trop rapide pour la réponse.
Désolé.

Voici une solution que j'ai testé, et qui fonctionne :

Code : Tout sélectionner

#include <File.au3>

$hTest = FileRead ("Test.txt")
$aTest = StringSplit($hTest, "")

Msgbox(0,"Caractère N°4", $aTest[4])

Re: [R] Lecture d'un caractère précis dans un fichier

Posté : sam. 01 mars 2008 14:27
par ani
::Aide ::
stringlen = retourne le nombre de caractère de la chaîne
stringsplit = découpe la chaîne
string = chaîne

je propose une fonction :)
A amèliorer, deux chose a ajouter, retourner les erreurs dans le cas ou le rang sélectionné est trop haut genre y 13 rang tu demande le 14 erreur et vice versa.

cette fonction peut retourner le rang ou la lettre ou encore le tableau

Code : Tout sélectionner

$Texte = "ABCD"
ConsoleWrite(_test($Texte,"C")) ;retoune 3
ConsoleWrite(_test($Texte,2)) ; retourne B
ConsoleWrite(_test($Texte,"")) ; retourne un tableau avec le rang et la lettre

Func _test($Texte,$Rang)
$Sortie =""
$Len = stringlen($Texte)
$Split = stringsplit($Texte,"")
for $x = 1 to $Len
    if $x = Number($Rang) Then
        $Sortie = $split[$x]
    Elseif $rang = string($split[$x]) Then
        $Sortie = $x
    ElseIf $rang = "" Then
     $Sortie &= $x & @TAB & $split[$x] & @LF
    EndIf
Next
return $Sortie
EndFunc
ou bien dans la condition If/Endif

Code : Tout sélectionner

$Texte = "ABCD"
ConsoleWrite(_test($Texte,1))

Func _test($Texte,$Rang)
$sortie =""
$Len = StringLen($Texte)
$Split = StringSplit($Texte,"")
For $x = 1 to $len
    If String($rang) = "" Then ; si la chaine rang = "" alors
    $sortie &= $x & @TAB & $split[$x] & @LF ; la sortie
    EndIf ; on ferme la condition
    
    If $x = Number($Rang) Then ; si l'indice de rang est égal à un chiffre alors
        $sortie = $split[$x] ; sort la lettre selon le rang selectionné
    EndIf ; on ferme la condition
    
    If $rang = string($split[$x]) Then ; si rang est égal a la chaine du tableau découpé alors
    $sortie = $x ; sort le nombre
    EndIf ; on ferme la condition
Next
return $sortie
EndFunc
tu peux aussi écrire le code de cette manière (on gagne quelque ligne ^^-

Code : Tout sélectionner

Func _test($Texte,$Rang)
$len = stringlen($Texte)
$split = stringsplit($Texte,"")
    For $x = 1 to $len
        If $x = Number($Rang) Then
        return $split[$x]
    Elseif $rang = string($split[$x]) Then
        return $x
    EndIf
Next
EndFunc
j'espere que c'est bon :)
commentaire ?

Re: [R] Lecture d'un caractère précis dans un fichier

Posté : dim. 09 mars 2008 16:55
par tolf
Le problème c'est que si le texte contient des chiffres et qu'on tape dans le paramètre $Rang un chiffre entre guillemets, la fonction ne va pas chercher la position du chiffre mais le caractère situé à cette position :

Code : Tout sélectionner

$Texte = "ABC1D"
ConsoleWrite(_test($Texte,"1")) ;<== retourne "A" au lieu de 4
Il faut donc plutôt mettre un autre paramètre qui indique si $Rang est un caractère, un nombre, ou "" :
► Afficher le texte

Re: [R] Lecture d'un caractère précis dans un fichier

Posté : dim. 09 mars 2008 21:19
par Tlem
La question était :
je voudrais lire un caractère précis dans un fichier, en connaisant son rang dans le fichier : existe-t-il une fonction pour le faire.
Est-ce que mon post ne répond pas à la question ?

Re: [R] Lecture d'un caractère précis dans un fichier

Posté : ven. 14 mars 2008 18:49
par tolf
Tlem a écrit :Est-ce que mon post ne répond pas à la question ?
Effectivement, le post de Tlem répond à la question. J'ai donc mis dans la partie Fonction un nouveau topic mais je n'ai pas réussi à supprimer mon message plus haut.

Re: [R] Lecture d'un caractère précis dans un fichier

Posté : ven. 14 mars 2008 21:56
par Tlem
tolf a écrit :
Tlem a écrit :mais je n'ai pas réussi à supprimer mon message plus haut.
Pas grave. ;)