<p>Choisissez vos outils</p>
<p>Il semble qu’Excel ne soit pas un outil adapté à ce que vous voulez faire.</p>
<p>Une approche serait d’utiliser un outil différent pour consolider ou résumer les données. <code>awk</code>, <code>sed</code>, <code>grep</code> ou <code>perl</code> pourraient être mieux adaptés à ce traitement initial et créer un fichier CSV plus petit qui pourrait ensuite être traité dans Excel ou d’autres outils.</p>
<p>Il existe d’autres outils qui pourraient être mieux adaptés pour faire tout le travail. Peut-être quelque chose comme R ou un SGBD. Cela dépend de ce que vous voulez faire avec les données.</p>
<p>Pour simplement prendre un ensemble de fichiers texte hétérogènes et réorganiser et sélectionner des colonnes, je me tournerais immédiatement vers <code>perl</code>. D’autres utiliseraient <code>awk</code>.</p>
<p>Puisque des outils comme <code>awk</code> et <code>perl</code> peuvent traiter les fichiers ligne par ligne et n’ont pas besoin de tout stocker en mémoire, ils peuvent traiter des fichiers énormes qui feraient planter d’autres outils. Ils peuvent aussi être étonnamment rapides.</p>
<p>Juste pour le plaisir, un exemple</p>
<p>Avec ces données</p>
<pre><code class="lang-auto">Apples,27,500,10.2,fruit,100,200,300
Chairs 1 501 123.78 furniture 101 201 301
Europe, 655, 502,0.0001,continent, 102, 202,302
</code></pre>
<p>nous pouvons produire cette sortie</p>
<pre><code class="lang-auto">fruit:Apples:10.2
furniture:Chairs:123.78
continent:Europe:0.0001
</code></pre>
<p>en utilisant cette commande</p>
<pre><code class="lang-auto">perl -l -n -e "print join(':',(split(/[, \t] */))[4,0,3])" *.txt
</code></pre>
<p>explication</p>
<p>élément<br>
ce qu’il fait</p>
<p><code>-l</code><br>
ajouter un saut de ligne après chaque print</p>
<p><code>-n</code><br>
traiter ligne par ligne mais ne pas afficher implicitement</p>
<p><code>-e</code><br>
ce qui suit est un programme à exécuter</p>
<p><code>print</code><br>
afficher le résultat de l’expression suivante</p>
<p><code>join(":"</code> liste<code>)</code><br>
créer une chaîne à partir d’une liste, utiliser “:” entre chaque élément</p>
<p><code>split (/</code>expr<code>/)</code><br>
utiliser l’expression pour diviser la ligne en champs</p>
<p><code>[, \t]</code><br>
soit une virgule, un espace ou une tabulation suivi de</p>
<p><code> *</code> (espace astérisque)<br>
0, 1 ou plusieurs espaces</p>
<p><code>(</code>liste<code>)[4,0,3]</code><br>
sélectionner les 4e, 0e et 3e éléments d’une liste</p>
<p>Ce programme d’une seule ligne est équivalent au suivant, qui peut être plus facile à suivre</p>
<p>`#!perl<br>
use warnings;<br>
use strict;</p>
<p>while(<>) { # lire ligne par ligne toute l’entrée ou tous les fichiers listés<br>
my <span class="mention">@columns</span> = split(/[, \t] */); # découper sur les espaces ou les virgules</p>
<p><em>(Réponse tronquée)</em></p>