Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Je cherche la fin de ligne (EOB)

4 réponses
Avatar
h.Bezard
Bonjour a tous,
je recherche l'equivalent de EOF pour une ligne.
J'ai vu un jour EOB (pour end of block) mais je ne sais plus si c'est en VB
ou delphi ou autre.
mon probleme est de tester tous les caracteres d'une ligne jusqu a la fin,
mais en cours de traitement je modifie cette ligne:

numficin2 = FreeFile
Open ficin2 For Input As #numficin2
Do While Not EOF(numficin2) ' Vérifie si la fin du fichier est atteinte.
Line Input #numficin2, ligneencours ' Lit une ligne de données.
For i = 1 To Len(ligneencours) 'teste tous les caracteres de la
ligne
'traitement qui modifie le nombre de caractere de la ligne
Next i
Loop


peut etre en cas de modif sur la ligne mettre un goto vers le For ?

numficin2 = FreeFile
Open ficin2 For Input As #numficin2
Do While Not EOF(numficin2) ' Vérifie si la fin du fichier est atteinte.
Line Input #numficin2, ligneencours ' Lit une ligne de données.
lignemodif:
For i = 1 To Len(ligneencours) 'teste tous les caracteres de la
ligne
If macondition = True Then
'je modifie
GoTo lignemodif
Else
'je touche a rien je continue
End If
Next i
Loop

Des suggestions?
Si quelqu'un peux m'aider merci d'avance.

Voyageur

4 réponses

Avatar
Jean-Marc
"h.Bezard" a écrit dans le message
de news:3fdb550d$0$6972$
Bonjour a tous,
je recherche l'equivalent de EOF pour une ligne.
J'ai vu un jour EOB (pour end of block) mais je ne sais plus si c'est en


VB
ou delphi ou autre.
mon probleme est de tester tous les caracteres d'une ligne jusqu a la fin,
mais en cours de traitement je modifie cette ligne:

numficin2 = FreeFile
Open ficin2 For Input As #numficin2
Do While Not EOF(numficin2) ' Vérifie si la fin du fichier est atteinte.
Line Input #numficin2, ligneencours ' Lit une ligne de données.
For i = 1 To Len(ligneencours) 'teste tous les caracteres de la
ligne
'traitement qui modifie le nombre de caractere de la ligne
Next i
Loop


peut etre en cas de modif sur la ligne mettre un goto vers le For ?

numficin2 = FreeFile
Open ficin2 For Input As #numficin2
Do While Not EOF(numficin2) ' Vérifie si la fin du fichier est atteinte.
Line Input #numficin2, ligneencours ' Lit une ligne de données.
lignemodif:
For i = 1 To Len(ligneencours) 'teste tous les caracteres de la
ligne
If macondition = True Then
'je modifie
GoTo lignemodif
Else
'je touche a rien je continue
End If
Next i
Loop

Des suggestions?
Si quelqu'un peux m'aider merci d'avance.



Bonjour,
l'instruction appropriée ici est : Exit For
C'est en gros ce que tu voulais faire avec ton goto, en plus joli.

Jean-Marc

Voyageur





Avatar
h.Bezard
Euh je ne crois pas car le "Exit For" va me faire resortir en fin de boucle
or je veux rerentrer dans la boucle For en prenant compte de la nouvelle
longueur de la ligne.

Je me trompe?

A+Voyageur

"Jean-Marc" a écrit dans le message de news:
3fdb57b2$0$27211$
"h.Bezard" a écrit dans le


message
de news:3fdb550d$0$6972$



> numficin2 = FreeFile
> Open ficin2 For Input As #numficin2
> Do While Not EOF(numficin2) ' Vérifie si la fin du fichier est


atteinte.
> Line Input #numficin2, ligneencours ' Lit une ligne de données.
> lignemodif:
> For i = 1 To Len(ligneencours) 'teste tous les caracteres de la
> ligne
> If macondition = True Then
> 'je modifie
> GoTo lignemodif
> Else
> 'je touche a rien je continue
> End If
> Next i
> Loop
>
> Des suggestions?
> Si quelqu'un peux m'aider merci d'avance.

Bonjour,
l'instruction appropriée ici est : Exit For
C'est en gros ce que tu voulais faire avec ton goto, en plus joli.

Jean-Marc

> Voyageur
>
>
>




Avatar
Jean-Marc
"h.Bezard" a écrit dans le message
de news:3fdb7270$0$6982$
Euh je ne crois pas car le "Exit For" va me faire resortir en fin de


boucle
or je veux rerentrer dans la boucle For en prenant compte de la nouvelle
longueur de la ligne.

Je me trompe?

A+Voyageur



Hello,
je n'avais pas compris ce que tu voulais. Tu souhaites donc parcourir une
chaine,
la modifier en fonction de ceci ou cela, et continuer jusqu'à ce que tu sois
sur d'avoir fait toutes les modifs à faire ou que la fin de chaine soit
atteinte.

Tu peux utiliser une construction comme ceci:
au lieu d'une boucle de i à len(chaine), tu parcours ta chaine dans un
while.
Tu dois gérer manuelement ton indice courant (le i de ta boucle devient ici
pCur)
et tu dois gérer aussi la condition de sortie de ta boucle (inProgress)
Comme cette condition dépend sans doute entre autre de la longueur, tu dois
recalculer
la longueur apres avoir modifié ta chaine.

Evidemmment, sans savoir ce que tu veux faire, ce n'est peut être (surement)
pas la
solution la plus simple mais en tout cas c'est un moyen classique de faire
ce genre de choses.

Remarque: En général, sauf contraintes très particulières, on ne fait
pas de modification "en place". On travaille dans une variable temporaire et
on
réassigne à la fin.

Ci joint un petit exemple (il faut une form et un command Button) qui
illustre la méthode.

Bonne prog,
Jean-Marc
----------------------------------------------------------------------------
---
'
' Ce programme est un exemple pour ce cas particulier
' c'est un MAUVAIS exemple, très inefficace. On peut faire tout
' ça en une ligne (REPLACE) avec les instructions de VB6 mais c'est dans un
' but d'exemple uniquement !!!!
'
Option Explicit

Private Sub Command1_Click()
Dim chaine As String

chaine = "WLE PEWTIWT OIWSEAU SWUWR LAW BRWANCHEWWW"
chaine = TraiteChaine(chaine)
MsgBox chaine
End Sub

' Supprime les W dans la chaine, 1 par 1, par parcours de toute la chaine
' Cette fonction n'utilise VOLONTAIREMENT pas Replace ou Instr
' ou Mid en statement; la modification se fait en place.
'
Private Function TraiteChaine(chaine As String) As String
Dim pCur As Long
Dim instLength As Long
Dim inProgress As Boolean

inProgress = True
instLength = Len(chaine)
pCur = 1
While inProgress
If Mid$(chaine, pCur, 1) = "W" Then
If pCur = 1 Then
If instLength > 1 Then
chaine = Mid$(chaine, 2)
Else
chaine = ""
pCur = 0
End If
Else
If pCur = instLength Then
chaine = Mid$(chaine, 1, pCur - 1)
pCur = 0
Else
chaine = Mid$(chaine, 1, pCur - 1) & Mid$(chaine, pCur +
1)
pCur = pCur
End If
End If
instLength = Len(chaine)
Else
pCur = pCur + 1
End If
If pCur = 0 Or pCur > instLength Then
inProgress = False
End If
Wend
TraiteChaine = chaine
End Function
Avatar
h.Bezard
Salut,
j'ai perseveré en attendant une reponse, et le Goto qui me renvoie avant la
boucle for a l air de marcher :

F = 1
repasseligne:
For I = F To Len(Ligneencours) 'teste tous les caracteres de la
ligne
'je teste mes conditions
if MESCONDITIONS Then
'je modifie ma ligne
F = Debutmodif 'pour ne pas refaire ce qui est deja fais
GoTo repasseligne
End If
Next I
il faut encore que je le verifie.
mais ta maniere de faire me parait plus saine que les goto,mais elle me
ferai aussi modifier mon code en profondeur.
Donc merci beaucoup pour cette reponse rapide, que je mettrai en ouevre sur
mes prochain code.

A+ Voyageur

"Jean-Marc" a écrit dans le message de news:
3fdc2de2$0$2865$
"h.Bezard" a écrit dans le


message
de news:3fdb7270$0$6982$
> Euh je ne crois pas car le "Exit For" va me faire resortir en fin de
boucle
> or je veux rerentrer dans la boucle For en prenant compte de la nouvelle
> longueur de la ligne.
>
> Je me trompe?
>
> A+Voyageur

Hello,
je n'avais pas compris ce que tu voulais. Tu souhaites donc parcourir une
chaine,
la modifier en fonction de ceci ou cela, et continuer jusqu'à ce que tu


sois
sur d'avoir fait toutes les modifs à faire ou que la fin de chaine soit
atteinte.

Tu peux utiliser une construction comme ceci:
au lieu d'une boucle de i à len(chaine), tu parcours ta chaine dans un
while.
Tu dois gérer manuelement ton indice courant (le i de ta boucle devient


ici
pCur)
et tu dois gérer aussi la condition de sortie de ta boucle (inProgress)
Comme cette condition dépend sans doute entre autre de la longueur, tu


dois
recalculer
la longueur apres avoir modifié ta chaine.

Evidemmment, sans savoir ce que tu veux faire, ce n'est peut être


(surement)
pas la
solution la plus simple mais en tout cas c'est un moyen classique de faire
ce genre de choses.

Remarque: En général, sauf contraintes très particulières, on ne fait
pas de modification "en place". On travaille dans une variable temporaire


et
on
réassigne à la fin.

Ci joint un petit exemple (il faut une form et un command Button) qui
illustre la méthode.

Bonne prog,
Jean-Marc
--------------------------------------------------------------------------


--
---
'
' Ce programme est un exemple pour ce cas particulier
' c'est un MAUVAIS exemple, très inefficace. On peut faire tout
' ça en une ligne (REPLACE) avec les instructions de VB6 mais c'est dans


un
' but d'exemple uniquement !!!!
'
Option Explicit

Private Sub Command1_Click()
Dim chaine As String

chaine = "WLE PEWTIWT OIWSEAU SWUWR LAW BRWANCHEWWW"
chaine = TraiteChaine(chaine)
MsgBox chaine
End Sub

' Supprime les W dans la chaine, 1 par 1, par parcours de toute la chaine
' Cette fonction n'utilise VOLONTAIREMENT pas Replace ou Instr
' ou Mid en statement; la modification se fait en place.
'
Private Function TraiteChaine(chaine As String) As String
Dim pCur As Long
Dim instLength As Long
Dim inProgress As Boolean

inProgress = True
instLength = Len(chaine)
pCur = 1
While inProgress
If Mid$(chaine, pCur, 1) = "W" Then
If pCur = 1 Then
If instLength > 1 Then
chaine = Mid$(chaine, 2)
Else
chaine = ""
pCur = 0
End If
Else
If pCur = instLength Then
chaine = Mid$(chaine, 1, pCur - 1)
pCur = 0
Else
chaine = Mid$(chaine, 1, pCur - 1) & Mid$(chaine, pCur


+
1)
pCur = pCur
End If
End If
instLength = Len(chaine)
Else
pCur = pCur + 1
End If
If pCur = 0 Or pCur > instLength Then
inProgress = False
End If
Wend
TraiteChaine = chaine
End Function