Rechercher : dans
Par :

Parcour fichier et arret a la 1ere occurence

Dernière réponse le 31 mar 2008 à 19:57:13 evita8, le 27 mar 2008 à 18:23:55 
 Signaler ce message aux modérateurs

Bonjour,


J'essaye de parcourir un fichier XSD ligne par ligne et de récupérer le nom de l'élément racine.
Dans le fichier XSD, voici la déclaration de l'élément racine :
<xsd:element name="Blabla" type="Blabla"/>


Que pensez vous de ma méthode :
- Parcourt du fichier avec une boucle while
- Test de la ligne en cour : verifier si elle est du type <xsd:element name="Blabla" type="Blabla"/>
- Arrêt a la premiere ocurence rencontrée (puisqu'il peut y avoir d'autre lignes commençant par "<xsd:element")

Mon script :

while read line
do
if [ "grep '^<xsd:element'" ] ; then
echo "$line"
else
echo "pas trouve"
fi
done < fichier.xsd


Problème : lors de l'execution le script recrache toutes les lignes du fichier XSD et non pas juste celles qui commencent par "<xsd:element"

Et comment faire pour arrêter la boucle des qu'une ligne contient "<xsd:element" ?


Merci !

Meilleures réponses pour « Parcour fichier et arret a la 1ere occurence » dans :
PHP - Les fichiers Voir La gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...
Télécharger Unlocker VoirUnlocker est un outil permettant de forcer la suppression d'un fichier lorsque le système refuse de le faire. Unlocker possède les fonctionnalités suivantes : Fermeture de l'application utilisant le fichier Arrêt du processus utilisant le...
Apache - Les fichiers .htaccess VoirLes fichiers .htaccess sont des fichiers de configuration d'Apache, permettant de définir des règles dans un répertoire et dans tous ses sous-répertoires (qui n'ont pas de tel fichier à l'intérieur). On peut les utiliser pour protéger un répertoire...
Formats et extensions de fichiers VoirRemarque : La liste ci-dessous n'est pas exhaustive et certains noms d'extension peuvent avoir plusieures fonctionnalités. Quant aux programmes proposés pour utiliser ces fichiers, ils ne sont pas forcément les seuls, ni les plus...
Fichier ISO (Image ISO) VoirFormat ISO Un fichier possédant l'extension .ISO est une image ISO, c'est-à-dire une image d'un disque (CD, DVD ou disque dur) sous forme de fichier, créer avec un logiciel de gravure. Comment lire un fichier ISO ? En l'absence de graveur, il...

1

jipicy, le 27 mar 2008 à 18:56:19

Salut,

#! /bin/bash

grep -m 1 "^<xsd:element" $1
if [ $? = 1 ]; then
        echo "Pas trouvé"
fi
;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

2

evita8, le 27 mar 2008 à 20:22:20

C'était simple en fait, merci !
J'ai mis la ligne trouvée dans la variable $ligne

Pour réccupérer le "Blabla", j'ai rajouté :
var=$(cut -f2 -d '"' <<< $ligne)

echo $var me donne :
var=Blabla

Merci !

Répondre à evita8

3

evita8, le 31 mar 2008 à 17:40:48

Hello !

La ligne de commande que tu m'as donné la dernière fois (recherche de la premiere occurence d'un motif dans un fichier : grep -m 1 " ^<xsd:element" $1) fonctionne trés bien chez moi mais sur l'odinateur de l'ecole je lis une erreure :
grep: option invalide -- m

Aurai tu une autre solution a mon problème ?

Merci !

Répondre à evita8

4

jipicy, le 31 mar 2008 à 17:48:28

Re-

Ben déjà regarde le "man grep" pour voir les options disponibles (ou grep --help) et la version (grep --version).

Sinon essaye avec :

sed -n '/^<xsd:element/{p;q}' fichier
;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

5

evita8, le 31 mar 2008 à 18:38:18

Je n'arrive pas à recuperer ma ligne... Je ne vois pas du tout le problème !
pourtant la fonction "-n" existe sur cette version de unix (j'ai verifié dans le man)

ligne=$(sed -n '/<xsd:element/{p;q}' data/$2)

Le message d'erreur qu'il me renvoie :
sed: -e expression #1, char 19: Extra characters after command

Répondre à evita8

6

jipicy, le 31 mar 2008 à 18:49:45

Et directement depuis le shell, ça marche ou pas ?
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

7

evita8, le 31 mar 2008 à 18:58:08

Directement depuis le shell, je rentre

sed -n '/<xsd:element/{p;q}' data/fichier.xsd

Il me met la meme erreur

Répondre à evita8

8

jipicy, le 31 mar 2008 à 19:06:14

Commence par enlever le "q" à la fin (et les accolades) et vois si ça marche comme ça.

Si ça marche, essaie :

sed -n '0,/<xsd:element/{/<xsd:element/p}' data/fichier.xsd 
;-)
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

9

jipicy, le 31 mar 2008 à 19:14:38

Commence par enlever le "q" à la fin et vois si ça marche comme ça.

Si ça marche, essaie :

sed -n '0,/<xsd:element/{/<xsd:element/p}' data/fichier.xsd 
;-)

JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

11

evita8, le 31 mar 2008 à 19:45:42

<xsd:element name="Bibliotheque" type="Bibliotheque"/>

De cette ligne, je voudrai recuperer le nom Bibliotheque

Ma ligne (qui marchait chez moi mais ne fonctionne plus a l'ecole...) :
RACINE=$(cut -f2 -d '"' <<< $ligne) ne fonctionne plus

Il me renvoie :
tp4.sh: command substitution: line 1: syntax error near unexpected token `<<<'
tp4.sh: command substitution: line 1: `cut -f2 -d '"' <<< $ligne'

J'ai aussi essayé :

$ligne | cut -f2 -d '"'

Mais ça ne marche pas non plus

need help!

Répondre à evita8

12

jipicy, le 31 mar 2008 à 19:50:05

echo $ligne | cut -f2 -d '"' 
;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

13

 evita8, le 31 mar 2008 à 19:57:13

Thanks a lot !
Ce sont des questions basiques mais là je panique a cause de tte ces erreures !

Répondre à evita8

10

evita8, le 31 mar 2008 à 19:27:36

C'est bon, en enlevant "q" et les accollades la ligne fonctionne !! Merci beaucoup jipicy !!

J'ai encore enormément d'erreurs dans mon script... Je ne savais pas qu'il y avait autant de pb de portabilité sous unix

Répondre à evita8