Question compter des caractères dans un fichiers

Plus d'informations
il y a 15 ans 5 mois #7940 par jojo
bonjour mes amis :laugh: ,

j'ai un nouveau problème, je veux compter tous les caractères de la classe [a-z] dans un fichier char.txt.

le fichier est volumineux pour cause j'essaie de chercher la méthode la plus rapide possible pour le comptage.


pouvez-vous m'aider, merci :laugh:

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 5 mois #7941 par Arthur
Je ne sait pas si c'est la facon la plus optimisé :

[code:1]
Get-Content .\monfichier.ps1 | foreach {$nbchar += $_.Length }
#$nbchar = nb de caractères [/code:1]

EDIT:

Tu peut aussi faire ca mais curieusement ca a l'air plus long que ma première méthode :

[code:1]get-content .\mon_fichier.ps1 | measure-object -character[/code:1]

Warf j'avais pas vu le [a-z] (fatigué}
[code:1]Get-Content .\monfichier.ps1 | foreach {$_.ToCharArray() | where {$_ -mat
ch \"[a-z]\" } | foreach { $nbchar++ } }[/code:1]

A mon avis y a plus rapide faut que je réfléchisse plus.

Message édité par: bilbao, à: 19/10/10 10:27<br><br>Message édité par: bilbao, à: 19/10/10 10:51

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 5 mois #7942 par Richard Lazaro
Bonjour,

Je sais pas si c'est le plus rapide mais je pense que je sois un poil plus rapide que bilbao avec ce code ci :

[code:1]
gc .\monfichier.ps1 `
| %{ $_.ToCharArray() `
| %{if($_ -cmatch '[a-z]'){++$nbchar}}
}
[/code:1]

A noter que mon regex prend en compte la casse, c'est à dire que je compterais pas les A,B,C...Z mais que les a,b,c...z.

Je sais pas si c'est ce que tu voulais précisement.

Bien Cordialement,
Richard Lazaro.

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 5 mois #7943 par jojo
merci les gars :laugh: ,

j'avais fais ceci:

[code:1]((gc fichier) -split('') -match('[a-z]'))|%{$ki++}[/code:1]

et

[code:1]gc fichier|%{$_.getenumerator() -match \&quot;[a-z]\&quot;|Measure|%{$k+=$_.count}} [/code:1]

mais je ne sais pas c'est plus rapide ou non, car je ne peux pas tester maintenant.

j'ai quelques question,
1- quel est la différence entre ++$nbchar et $nbchar++

2- quel est la difference entre $_.count et $_.length

3- quel est la différence entre $_.getenumerator() et $_.ToCharArray()

vous êtes génial les gas, merci :laugh:

Message édité par: jojo, à: 19/10/10 11:57

Message édité par: jojo, à: 19/10/10 11:59<br><br>Message édité par: jojo, à: 19/10/10 12:20

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 5 mois #7944 par Richard Lazaro
Re-

Je vais essayer de répondre à tout ^^

1- quel est la différence entre ++$nbchar et $nbchar++

Cela se nomme la pré et la post incrémentation. Cela a une grande importance lorsqu'on minimise le code par exemple :

[code:1]
PS&gt; $a = 1
PS&gt; 1 -eq $a++
True
PS&gt; $a
2

PS&gt; $a = 1
PS&gt; 1 -eq ++$a
False
PS&gt; $a
2
[/code:1]

Donc, lors de la post incrémentation (1er exemple) on traite l'objet contenu dans la variable $a avant de vrai l'incrémentation
Et dans la pré incrémentation (2eme exemple) on incrémente l'objet dans $a avant de le passer à l'opérateur -eq

2- quel est la difference entre $_.count et $_.length

La propriété count permet de conter le nombre d'élément d'un tableau ou d'une liste en générale

La propriété lenght s'applique à une chaîne de caractère et retourne donc la longueur de cette chaîne.

3- quel est la différence entre $_.getenumerator() et $_.ToCharArray()

Là on aborde quelque chose de plus compliqué, j'espère ne pas me tromper.

La méthode GetEnumerator permet d'obtenir un objet qui nous permettra d'iterer sur la collection qui appel cette méthode. La méthode GetEnumerator vient de l'interface IEnumerable ce quif ait que chaque collection aura cette méthode.

La méthode ToCharArray permet de transformer une chaîne de caractère de type String en tableau de cractère de type Char[], cette méthode est spécifique à la classe String.

Tu auras peut être remarqué que la classe String à la méthode GetEnumerator, je pense que l'explication vient du fait qu'une chaîne de caractère est avant tout un tableau de charactère.

Après, cette partie n'est pas ma spécialité on va dire :/

J'espère avoir répondu au mieux à tes questions.

Bien Cordialement,
Richard Lazaro.

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 5 mois #7945 par jojo
merci Richard :laugh:

je crois que je commence à comprendre, reste une tt petite question, dans ton exemple:


[code:1]gc .\monfichier.ps1 `

| %{ $_.ToCharArray() `

| %{if($_ -cmatch '[a-z]'){++$nbchar}}

}[/code:1]

pourquoi avoir choisi ++$nbchar au lieu de $nbchar++
sachant que tous les deux retournent le bon resultat

merci :laugh:

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.045 secondes
Propulsé par Kunena