OVH Cloud OVH Cloud

saut de ligne et enreg

9 réponses
Avatar
BrunoL
Bonsoir,

Je récupère dans un fichier un vidage de bd dont certaines colonnes
contiennent du texte dont le caractère saut de ligne.

Le vidage est en .txt or lorsque j'accéde avec un éditeur sur ce fichier
il traite le saut de ligne comme s'il s'agissait d'une fin
d'enregistrement ... c'est illisible :-(

Y a t'il une solution pour conserver le saut dans la zone mais l'inhiber
pour rester dans le même enreg de fichier ?

Ou dit différement comment traiter ce fichier en récupérant
l'intégralité de l'enregistrement sans que les saut de ligne contenu
dans l'enreg n'interfére.

Merci.

9 réponses

Avatar
yves
On Sat, 11 Mar 2006 19:41:59 +0100, BrunoL
wrote:

Bonsoir,

Je récupère dans un fichier un vidage de bd dont certaines colonnes
contiennent du texte dont le caractère saut de ligne.

Le vidage est en .txt or lorsque j'accéde avec un éditeur sur ce fichier
il traite le saut de ligne comme s'il s'agissait d'une fin
d'enregistrement ... c'est illisible :-(

Y a t'il une solution pour conserver le saut dans la zone mais l'inhiber
pour rester dans le même enreg de fichier ?

Ou dit différement comment traiter ce fichier en récupérant
l'intégralité de l'enregistrement sans que les saut de ligne contenu
dans l'enreg n'interfére.


Un petit exemple, peut-être, pour illustrer ?

--
Yves

Avatar
R12y
On Sat, 11 Mar 2006 19:41:59 +0100, BrunoL wrote:

Je récupère dans un fichier un vidage de bd dont certaines colonnes
contiennent du texte dont le caractère saut de ligne.


Est-e qu'il y a un moyen quelconque de faire la différence entre un "vrai"
saut de ligne et un "faux"?

Si oui, alors dis-le nous.
Si non, je ne vois pas trop comment faire...

--
Debian/apt Repo: http://locataire-serveur.info/sections/liens/debian-repository
Fedora/yum Repo: http://locataire-serveur.info/sections/liens/fedora-core-yum

Avatar
BrunoL
On Sat, 11 Mar 2006 19:41:59 +0100, BrunoL wrote:


Je récupère dans un fichier un vidage de bd dont certaines colonnes
contiennent du texte dont le caractère saut de ligne.



Est-e qu'il y a un moyen quelconque de faire la différence entre un "vrai"
saut de ligne et un "faux"?

Si oui, alors dis-le nous.
Si non, je ne vois pas trop comment faire...

enreg = #zone1#zone2#zone3#zone4#


Mais dans zone3 correspondant à une zone type memo j'ai un caractère n

fichierSortie.write(str(enreg[y]))
écrit en fait 2 enreg :
#zone1#zone2#zone3 (début)
zone3 (fin)#zone4#

une lecture séquentielle donne bien ces deux enreg distincts.
J'ai changé n par t mais cela ne règle pas mon pb pour la suite de
traitement.
Au pire je remplacerai par un truc du genre £ puis recoderai ensuite
mais c'est bourrin ;-) et comme j'ai pas mal de cas différents ... 100s
de tables

A+


Avatar
Méta-MCI
Bonsoir !

Au vu du dessin de ton enregistrement :

#zone1#zone2#zone3#zone4#

on peut déduire que la fin d'enregistrement, c'est '#rn' (ou '#n')

Il suffit donc de charger entièrement le fichier, de "splitter" sur '#rn'
pour avoir les enregistrements, et de tous les "splitter" sur #, pour avoir
les champs.



Mais, j'ai un autre doute : et si, par exemple, zone3 contenait le
caractère '#' ? Aïe !



@-salutations

Michel Claveau
Avatar
Pierre Quentel
Il faut une fonction qui convertit le texte d'origine (celui qui peut
contenir des sauts de ligne) en une chaîne garantie sans saut de ligne

Tu peux utiliser urllib.quote_plus :

import urllib
(... lecture de la chaîne s dans la base ...)
fichier_dest.write(urllib.quote_plus(s)+'n')

Dans l'autre sens :
for line in fichier_dest:
s = urllib.unquote_plus(line[:-1])

Pierre
Avatar
BrunoL
Il faut une fonction qui convertit le texte d'origine (celui qui peut
contenir des sauts de ligne) en une chaîne garantie sans saut de ligne

Tu peux utiliser urllib.quote_plus :

import urllib
(... lecture de la chaîne s dans la base ...)
fichier_dest.write(urllib.quote_plus(s)+'n')

Dans l'autre sens :
for line in fichier_dest:
s = urllib.unquote_plus(line[:-1])

Pierre

J'essai ça.


Merci.

Avatar
Eric Deveaud
BrunoL wrote:
Bonsoir,

Je récupère dans un fichier un vidage de bd dont certaines colonnes
contiennent du texte dont le caractère saut de ligne.


donc le saut de ligne n'est pas le delimiteur d'enregistrement.

Le vidage est en .txt or lorsque j'accéde avec un éditeur sur ce fichier
il traite le saut de ligne comme s'il s'agissait d'une fin
d'enregistrement ... c'est illisible :-(

Y a t'il une solution pour conserver le saut dans la zone mais l'inhiber
pour rester dans le même enreg de fichier ?


expression reguliere pour chercher des sauts de lignes au sein d'un
enrregistrement et ignorer les sauts de lignes standards.

Ou dit différement comment traiter ce fichier en récupérant
l'intégralité de l'enregistrement sans que les saut de ligne contenu
dans l'enreg n'interfére.


acquisition classique (j'aime bine le ligne par ligne) et pour chacune d'entre
elle verifier si le saut de ligne correspond a une fin d'enregistrement ou non.
si non, continuer a lire en gardant ce saut de ligne

Eric


--
S'il te plait explique moi 2 secondes en quoi c'est un quote de goret,
parce que j'ai cité le message en entier?
c'est normal, je l'ai lu en entier et j'y ai répondu en entier.
-+- B in <http://www.le-gnu.net/> - tout est bon dans le cochon -+-

Avatar
Eric Deveaud
BrunoL wrote:

enreg = #zone1#zone2#zone3#zone4#


Mais dans zone3 correspondant à une zone type memo j'ai un caractère n

fichierSortie.write(str(enreg[y]))
écrit en fait 2 enreg :
#zone1#zone2#zone3 (début)
zone3 (fin)#zone4#

une lecture séquentielle donne bien ces deux enreg distincts.
J'ai changé n par t mais cela ne règle pas mon pb pour la suite de
traitement.


je suis pas d'accord un lecture sequentielle te renvoie (dans ce cas) 2 choses
differentes et l'on peut savoir comment s'en sortir
si la ligne commence par # c'est un nouvel enregistrement
sinon c'est la fin de l'enregistrement precedent.

ou alors si une ligne ne fini pas par # c'est que la/les ligne suivantes vont
venir la completer.

question pourquoi ne pas avoir garde une syntaxe dnas le fichier de sortie
genre enreg = #mmm#mmm#mmm# ?


Eric
--
S'il te plait explique moi 2 secondes en quoi c'est un quote de goret,
parce que j'ai cité le message en entier?
c'est normal, je l'ai lu en entier et j'y ai répondu en entier.
-+- B in <http://www.le-gnu.net/> - tout est bon dans le cochon -+-


Avatar
Eric Deveaud
Méta-MCI wrote:
Bonsoir !

Au vu du dessin de ton enregistrement :

#zone1#zone2#zone3#zone4#

on peut déduire que la fin d'enregistrement, c'est '#rn' (ou '#n')

Il suffit donc de charger entièrement le fichier,


il parle de centaines de tables, ca risuqe de faire gros tres gros meme.

de "splitter" sur '#rn'
pour avoir les enregistrements, et de tous les "splitter" sur #, pour avoir
les champs.


voui

Mais, j'ai un autre doute : et si, par exemple, zone3 contenait le
caractère '#' ? Aïe !


boum meme.

Eric

--
S'il te plait explique moi 2 secondes en quoi c'est un quote de goret,
parce que j'ai cité le message en entier?
c'est normal, je l'ai lu en entier et j'y ai répondu en entier.
-+- B in <http://www.le-gnu.net/> - tout est bon dans le cochon -+-