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

saut ligne, chaîne, fichier.txt ???

8 réponses
Avatar
X
Bonjour,

L'utilisateur peut saisir en mutilignes, un texte libre (tronqué à 160),
étant entendu que le texte peut comporter des <rc>...

Le problème est qu'un fois rangé dans le fichier txt, si le texte sus-cité
comporte lui même des saut de ligne, il vont être pris en compte dans le
fichier.txt, et ça va aussi faire des saut de lignes.

Exemple:
saisie = un <rc> deux

fichier.txt =
un
deux

Le second problème est que j'exploite le fichier en comptant les lignes,
j'aurais dû plutôt mettre des bornes avec mot réservé, genre "$£§", mais
bon, c'est ainsi désormais.
Alors évidemment ça fausse tout, si je compte par exemple 18 lignes par
enregistrement, et qu'à cause des <rc> dans la zone de saisie texte, le
nombre de lignes augmente, ça plante tout !

Je me suis contenté de rafistoler en remplaçant tout <rc> venant de la
saisie, par 2 espaces dans le fichier, qui restituera le texte ainsi...

Question :
Est-ce qu'il y aurait une méthode pour qu'en enregistrant une zone texte qui
contient des <rc> ceux-ci ne soient pas pris en compte lors de cet
enregistrement dans le fichier, mais qu'en restituant le texte on retrouve
les <rc> (en conservant ma construction évidemment, sinon je sais faire,
l'erreur et de ne pas y avoir pensé) ???

Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------

8 réponses

Avatar
Fred
X a écrit :
Bonjour,

L'utilisateur peut saisir en mutilignes, un texte libre (tronqué à 160),
étant entendu que le texte peut comporter des <rc>...

Le problème est qu'un fois rangé dans le fichier txt, si le texte sus-cité
comporte lui même des saut de ligne, il vont être pris en compte dans le
fichier.txt, et ça va aussi faire des saut de lignes.

Le second problème est que j'exploite le fichier en comptant les lignes,
j'aurais dû plutôt mettre des bornes avec mot réservé, genre "$£§", mais
bon, c'est ainsi désormais.



Pourquoi faire simple !

Alors évidemment ça fausse tout, si je compte par exemple 18 lignes par
enregistrement, et qu'à cause des <rc> dans la zone de saisie texte, le
nombre de lignes augmente, ça plante tout !

Je me suis contenté de rafistoler en remplaçant tout <rc> venant de la
saisie, par 2 espaces dans le fichier, qui restituera le texte ainsi...



Un «replace» de CR avec un caractère qui n'est pas susceptible
d'apparaître : par exemple vbTab
Et l'inverse à la restitution.
Je ne vois pas bien quel est le problème ?

Question :
Est-ce qu'il y aurait une méthode pour qu'en enregistrant une zone texte qui
contient des <rc> ceux-ci ne soient pas pris en compte lors de cet
enregistrement dans le fichier, mais qu'en restituant le texte on retrouve
les <rc> (en conservant ma construction évidemment, sinon je sais faire,
l'erreur et de ne pas y avoir pensé) ???



Cela relèverait de la magie.
Avatar
X
Je voulais juste savoir à tout hasard s'il y avait un truc ???

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Fred" a écrit dans le message de news:
%
X a écrit :
Bonjour,

L'utilisateur peut saisir en mutilignes, un texte libre (tronqué à
160), étant entendu que le texte peut comporter des <rc>...

Le problème est qu'un fois rangé dans le fichier txt, si le texte
sus-cité comporte lui même des saut de ligne, il vont être pris en compte
dans le fichier.txt, et ça va aussi faire des saut de lignes.

Le second problème est que j'exploite le fichier en comptant les lignes,
j'aurais dû plutôt mettre des bornes avec mot réservé, genre "$£§", mais
bon, c'est ainsi désormais.



Pourquoi faire simple !

Alors évidemment ça fausse tout, si je compte par exemple 18 lignes par
enregistrement, et qu'à cause des <rc> dans la zone de saisie texte, le
nombre de lignes augmente, ça plante tout !

Je me suis contenté de rafistoler en remplaçant tout <rc> venant de la
saisie, par 2 espaces dans le fichier, qui restituera le texte ainsi...



Un «replace» de CR avec un caractère qui n'est pas susceptible
d'apparaître : par exemple vbTab
Et l'inverse à la restitution.
Je ne vois pas bien quel est le problème ?

Question :
Est-ce qu'il y aurait une méthode pour qu'en enregistrant une zone texte
qui contient des <rc> ceux-ci ne soient pas pris en compte lors de cet
enregistrement dans le fichier, mais qu'en restituant le texte on
retrouve les <rc> (en conservant ma construction évidemment, sinon je
sais faire, l'erreur et de ne pas y avoir pensé) ???



Cela relèverait de la magie.


Avatar
Gloops
X a écrit :
Je voulais juste savoir à tout hasard s'il y avait un truc ???



Bonjour,

Si il y avait un "truc", comme tu dis, on ne nous aurait pas parlé de
"virus" sur les RFID, les successeurs des codes-barres.

Le seul principe est d'avoir un séparateur qui ne puisse pas se trouver
dans le texte à traiter.

Par exemple :
strSep =
"SixCentSixSousCesSixCentSixSaucisonsCi?MaisC'estCarrementAnticonstitutionnel!"

txtEntree = Replace(txtEntree, strSep, "")

et on pourra avoir à traiter :
strSep + txtEntree + strSep

Après il faut se débrouiller pour savoir quoi en faire, car pour une
requête SQL le séparateur habituel est le guillemet. Mais là si je
continue ça suppose des digressions sur le développement SQL, on n'est
pas au bout. ça pourrait être intéressant de continuer sur un newsgroup
consacré à SQL d'ailleurs. Si ça se trouve ça a déjà été fait.

Si c'est trop casse-tête on recourt à des jeux d'enregistrements.

Bien entendu, si l'utilisateur tape le séparateur dans la zone de texte,
celui-ci passera à la trappe, on peut concevoir un message qui alerte
l'utilisateur.

If InStr(txtEntree, strSep) > 0 Then
MsgBox "Le texte " + vbCrLf + strSep + vbCrLf + _
"ne doit pas figurer dans la zone de texte. " + _
"Veuillez rectifier SVP."

Cancel = True
End If

en faisant attention d'utiliser ça dans une procédure événementielle qui
comporte un paramètre Cancel permettant d'inhiber la fermeture du
formulaire.

Si on ne fait pas le contrôle de la présence du séparateur dans la zone
de texte, on diffuse à des milliers d'exemplaires un système
d'exploitation qui devra faire l'objet chaque mois d'une ribambelle de
mises à jour pour "faille de sécurité" car un pirate aura trouvé le
séparateur et aura su quoi mettre derrière pour faire des blagues à sa
sauce, pas toujours de bon goût. Heureusement au bout d'un moment on
comprend l'ampleur du problème, et on décide enfin de retarder la sortie
de la version suivante pour resserrer les boulons. Il y aura des
méchantes langues pour dire qu'économiquement c'est une mauvaise
nouvelle, car les méchantes langues aiment bien raisonner à courte vue.

J'ai *un peu* élargi le sujet, non ?
Bon allez je reviens. Bien entendu on peut mettre un séparateur plus
court. C'est rare qu'un utilisateur lambda tape "@#@" dans une zone de
texte, pour faire joli. D'ailleurs, pour une requête SQL, c'est mieux
que le séparateur soit plus court, sauf si on réussit à éviter qu'il
passe dans la requête.

Si tu prends le retour curseur comme séparateur, ça oblige à retirer les
retours curseur du contenu de la zone de texte. Ne serait-ce pas un
chouïa plus simple de prendre le problème dans l'autre sens ?

Enfin bon, c'est juste une suggestion comme ça sans avoir creusé ...
Avatar
Gloops
Gloops a écrit :
Bien entendu, si l'utilisateur tape le séparateur dans la zone de texte,
celui-ci passera à la trappe, on peut concevoir un message qui alerte
l'utilisateur.

If InStr(txtEntree, strSep) > 0 Then
MsgBox "Le texte " + vbCrLf + strSep + vbCrLf + _
"ne doit pas figurer dans la zone de texte. " + _
"Veuillez rectifier SVP."

Cancel = True
End If



On peut imaginer une version plus élaborée, qui va introduire des
caractères modificateurs si le séparateur est présent dans le texte.

posSep = InStr(txtEntree, strSep)
strTemp = Left$(txtEntree, pos - 1)
For N = posSep To posSep + Len(strSep)
strTemp = strTemp + "" + Mid$(txtEntree, N, 1)
Next
strTemp = strTemp + Right$(txtEntree, _
Len(txtEntree - posSep - Len(strSep)


J'indique ça pour le principe, comme je n'ai pas testé il peut y avoir
besoin d'ajouter ou de retirer 1 par-ci par-là.

Si on fait ça, ça suppose d'avoir en sortie une routine qui va chercher
le caractère "" dans le texte pour insérer le caractère suivant sans
l'interpréter.
Avatar
X
Tu te réponds à toit-même Gloops, je sais comment faire, je voulais
simplement savoir s'il y avait une méthode particulière, mais je te remercie
beaucoup :o)

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Gloops" a écrit dans le message de news:
%
Gloops a écrit :
Bien entendu, si l'utilisateur tape le séparateur dans la zone de texte,
celui-ci passera à la trappe, on peut concevoir un message qui alerte
l'utilisateur.

If InStr(txtEntree, strSep) > 0 Then
MsgBox "Le texte " + vbCrLf + strSep + vbCrLf + _
"ne doit pas figurer dans la zone de texte. " + _
"Veuillez rectifier SVP."
Cancel = True
End If



On peut imaginer une version plus élaborée, qui va introduire des
caractères modificateurs si le séparateur est présent dans le texte.

posSep = InStr(txtEntree, strSep)
strTemp = Left$(txtEntree, pos - 1)
For N = posSep To posSep + Len(strSep)
strTemp = strTemp + "" + Mid$(txtEntree, N, 1)
Next
strTemp = strTemp + Right$(txtEntree, _
Len(txtEntree - posSep - Len(strSep)


J'indique ça pour le principe, comme je n'ai pas testé il peut y avoir
besoin d'ajouter ou de retirer 1 par-ci par-là.

Si on fait ça, ça suppose d'avoir en sortie une routine qui va chercher le
caractère "" dans le texte pour insérer le caractère suivant sans
l'interpréter.


Avatar
Fred
Dans : news:%23c$,
Gloops disait :

Après il faut se débrouiller pour savoir quoi en faire, car pour une
requête SQL le séparateur habituel est le guillemet.



Salut Gloops,

Le séparateur n'est pas le guillemet mais l'apostrophe. C'est un détail.
En fait, ce que je voulais te signaler c'est que la solution existe et
est très vivement encouragée par Microsoft pour éviter les attaques de
type SQL Injection (mais aussi tout simplement les bugs). C'est
l'utilisation d'objets parameters plutôt que de faire de la
concaténation de chaînes de caractères.


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
Gloops
Fred a écrit :
En fait, ce que je voulais te signaler c'est que la solution existe et
est très vivement encouragée par Microsoft pour éviter les attaques de
type SQL Injection (mais aussi tout simplement les bugs). C'est
l'utilisation d'objets parameters plutôt que de faire de la
concaténation de chaînes de caractères.




Ah, ça valait le coup de le dire, ça.
Avatar
Gloops
X a écrit :
Tu te réponds à toit-même Gloops, je sais comment faire, je voulais
simplement savoir s'il y avait une méthode particulière, mais je te remercie
beaucoup :o)




Bon, OK, j'avoue que je ne me rendais pas bien compte si ma méthode
était particulière ou pas.


Ma foi, du moment qu'il n'y a pas de casse ...