Contenu fichier ecrasé anormalement shell

Fermé
teab - 4 juin 2010 à 09:56
 teab - 4 juin 2010 à 14:59
Bonjour à tous!

Une fois de plus je me tourne vers le forum pour tenter de solutionner un probleme qui m'occupe depuis pas mal d'heures.

J'ai une routine, qui contient 4 boucles imbriquées.
A chaque debut de boucle, une modification de fichier est effectuée. (2 fichiers concernés)
Chaque boucle parcourt un nombre elevé de points.

Le problème c'est que la routine tourne bien pour les 200 à 300 premiers points (aléatoire) mais à partir de là,le contenu de l'un ou l'autre des deux fichiers, voire les deux, est supprimé et le ou les fichiers sont donc vides. A partir de là le noyau de calcul qui prend ces fichiers en entrée ne peut plus tourner.

Je n'arrive pas à identifier la cause du problème. Cela pourrait t-il etre un problème du shell (un plantage au bout d'un certains nombre d'iterations)?

Merci encore pour votre aide!

Allure du fichier

boucle I (M points)
--> modification du fichier x.txt

boucle J (N points)
--> modification du fichier x.txt

boucle K ( O points)
--> modification du fichier x.txt

boucle L (P points)
--> modification du fichier y.txt

lancement du noyau de calcul

fin

fin

fin

fin

Les modifications modifient un champ d'une ligne précise à chaque fois.

A voir également:

3 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 4/06/2010 à 13:38
hello
est-ce que les boucles s'exécutent séquentiellement ou en parralèle/arrière plan ?
vu que c'est le même fichier et que les boucles sont imbriquées, il est important qu'il soit fermé avant de passer à la boucle suivante
0
sequentiellement donc pas de tache de fond.
0
Ne trouvant toujours pas la source du problème, j'ai rajouter quelques lignes de code qui testent si les fichiers sont vides ou non, et qui remette l'ensemble des fichiers dans les conditions juste avant plantage.

Ca à l'air de tourner pas mal comme ça donc je vais laisser ça comme ça.

J'ai dit que je testais si les fichiers étaient vide mais en fait je teste si le premier champ est vide. J'avais trouvé une commande pour tester si le fichier est vide mais j'ai pas réussi à l'exploiter:

if test -z myfile
then
echo "true"
fi

Savez-vous ou est mon erreur?

merci!
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
4 juin 2010 à 14:44
Salut,

"-z" c'est pour les chaînes de caractères, "-s" c'est pour les fichiers ;-))

Mais attention, renvoie vrai si le fichier a une taille différente de 0 ;-\
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
4 juin 2010 à 14:49
-z teste la longueur d'une chaine de caractère. Pour un fichier, utiliser -s
-s file True if file exists and has a size greater than zero
0
c'est noté.
Je ferai le test et selon si vide ou pas je sortirai un boolean et je ferai un test sur ce booleen.

Merci encore à vous deux.
0