Contenu fichier ecrasé anormalement shell

teab -  
 teab -
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 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
teab
 
sequentiellement donc pas de tache de fond.
0
teab
 
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   Statut Modérateur Dernière intervention   4 896
 
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 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
-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
teab
 
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