Numérotation de ligne
guy_1927
Messages postés
2
Statut
Membre
-
heyquem Messages postés 808 Statut Membre -
heyquem Messages postés 808 Statut Membre -
Bonjour,
Je suis très novice en prog et voila mon problème :
Tableau 1 :
A1BG 2
A1BG 2
A1BG 2
A1BG 2
A1BG 2
A1BG 2
A1BG34 1
A1BG34 1
BG 1
BG 1
BG 1
Tableau 2 :
A1BG 2 6
A1BG 2 5
A1BG 2 4
A1BG 2 3
A1BG 2 2
A1BG 2 1
A1BG34 1 1
A1BG34 1 2
BG 1 1
BG 1 2
BG 1 3
j'ai un fichier avec 2 colonnes (tableau 1), la 1ère le nom et la 2ème colonne où il y a 1 ou 2. Pour un même nom c'est toujours le même chiffre qui est associé dans la colonne 2.
Et en fait pour le même nom dans la colonne 1 je veux numéroter de manière croissante quand il y a 1 et de manière décroissante dans la colonne 2 quand il y a un 2. Comme dans le tableau 2.
Pouvez-vous m'aidez ?
Merci d'avance
Je suis très novice en prog et voila mon problème :
Tableau 1 :
A1BG 2
A1BG 2
A1BG 2
A1BG 2
A1BG 2
A1BG 2
A1BG34 1
A1BG34 1
BG 1
BG 1
BG 1
Tableau 2 :
A1BG 2 6
A1BG 2 5
A1BG 2 4
A1BG 2 3
A1BG 2 2
A1BG 2 1
A1BG34 1 1
A1BG34 1 2
BG 1 1
BG 1 2
BG 1 3
j'ai un fichier avec 2 colonnes (tableau 1), la 1ère le nom et la 2ème colonne où il y a 1 ou 2. Pour un même nom c'est toujours le même chiffre qui est associé dans la colonne 2.
Et en fait pour le même nom dans la colonne 1 je veux numéroter de manière croissante quand il y a 1 et de manière décroissante dans la colonne 2 quand il y a un 2. Comme dans le tableau 2.
Pouvez-vous m'aidez ?
Merci d'avance
A voir également:
- Numérotation de ligne
- Partage de photos en ligne - Guide
- Formulaire en ligne de meta - Guide
- Mètre en ligne - Guide
- Apparaitre hors ligne instagram - Guide
- Formule somme excel ligne - Guide
5 réponses
Salut.
En quel langage veux tu faire ça ?
Le croissant est assez facile à faire, le décroissant impose de connaître à l'avance le nombre d'apparition, ce qui impose deux passe au moins.
On peut faire ça en C++ assez facilement avec les map je pense.
En quel langage veux tu faire ça ?
Le croissant est assez facile à faire, le décroissant impose de connaître à l'avance le nombre d'apparition, ce qui impose deux passe au moins.
On peut faire ça en C++ assez facilement avec les map je pense.
J'écris rapidement (donc surement plein d'erreur) ce que ça donnerai en C++ :
#include <fstream>
#include <map>
#include <string>
int main()
{
std::fstream fs("tableau1.dat",std::ios::in);
std::map<std::string,int> carte;
std::string clef;
int tmp;
while(fs)
{
fs>>clef>>tmp;
tmp=(tmp==1?-1:1);
carte[fs]+=tmp;// selon le signe on saura si c'est croissant ou decroissant
}
for(std::map<std::string,int>::iterator it=carte.begin();it!=carte.end;it++)
{
cout<<it->first;
if(it->second<0)cout<<" 1 "<<-(it->second);
else cout<<" 2 "<<it->second--;
}
return 0;
}
hello
avec awk, l'ordre des noms a été changé, est-ce important ?
avec awk, l'ordre des noms a été changé, est-ce important ?
$ awk '{x[$1, $2]++ } END{for (n in x){split(n, a, SUBSEP); if(a[2]==2)for(l=x[n];l>0;)print a[1], l-- ; else for(l=1;l<=x[n];)print a[1], l++}}' tableau1
BG 1
BG 2
BG 3
A1BG 6
A1BG 5
A1BG 4
A1BG 3
A1BG 2
A1BG 1
A1BG34 1
A1BG34 2
$
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voici un code en Python qui fonctionne en une seule passe, qui est sans erreur je pense et qui n'inverse pas les noms.
De plus il est utilisable même pour un giga-fichier car le fichier est examiné ligne après ligne sans avoir à le charger en totalité dans la mémoire vive et le nouveau fichier écrit au fur et à mesure
De plus il est utilisable même pour un giga-fichier car le fichier est examiné ligne après ligne sans avoir à le charger en totalité dans la mémoire vive et le nouveau fichier écrit au fur et à mesure
with open('depart.txt','r') as f, open('reecrit.txt','w') as g:
a,n = f.readline().split()
C = 1
while True:
try: b,m = f.readline().split()
except: b = None
C+=1
if b!=a:
gen = xrange(1,C) if n=='1' else xrange(C-1,0,-1)
g.writelines('{} {}\n'.format(a,i) for i in gen )
a,n,C = b,m,1
if b is None: break