2010-11-09 18 views
0

J'ai un script PHP qui importe jusqu'à 10 fichiers CSV différents. Chaque ligne de chaque fichier contient des informations sur le compte bancaire, y compris le solde. Après avoir importé toutes les données CSV dans ma base de données, je voudrais m'assurer que les données sont correctement entrées en comparant le solde total du compte dans la base de données au solde total du compte des fichiers CSV.Le moyen le plus simple pour totaliser les colonnes?

Je vois au moins quelques options:

  1. total manuellement toutes les soldes des comptes dans Excel - beurk.
  2. Écrivez un script PHP pour lire chaque fichier CSV et additionnez les soldes de compte - aussi beurk.
  3. Une troisième option que j'espère exister. Il serait étonnant si je pouvais faire quelque chose comme:

    excel --file="cd.csv" | sum --column="E"

C'est évidemment pas une chose réelle, mais nous espérons que vous avez l'idée. En utilisant une combinaison de PHP, MySQL, des commandes Linux, Excel et/ou d'autres outils, existe-t-il un moyen simple de faire cela?

+0

u peut changer php pour accepter $ argv (mode cli) ou un simple bash 'total = 0; col = 9; pour i dans 'cut -d '' cd.csv -f $ col'; Laisser total = $ i + $ total; terminé; echo $ total'; – ajreal

Répondre

0

Ne pas à compléter réponse pour vous, mais AWK devrait être en mesure de résoudre votre problème: Jetez un oeil à ces 2 messages:

https://superuser.com/questions/53652/transforming-csv-file-using-sed

Shell command to sum integers, one per line?

Je ne suis pas assez d'un expert AWK pour donner la solution, mais peut-être quelqu'un d'autre peut nous aider ici.

Une autre option (que vous pouvez également envisager beurk) est d'utiliser une bibliothèque comme PHPExcel

+0

On dirait que je vais aller avec 'awk'. –

+0

Mise à jour: cela semble avoir fonctionné: 'cat file.csv | awk -F "\" *, \ "*" '{s + = $ 2} FIN {print s}' '(Cela totalise la deuxième colonne.) –

0

Vous pouvez parcourir le fichier CSV à l'aide fgetcsv() qui convertit chaque ligne à un tableau de valeurs. Vous pouvez accumuler la valeur de l'élément du tableau contenant le solde lorsque vous vous déplacez à travers chaque itération jusqu'à ce que vous obteniez la somme totale. Utilisez glob pour obtenir la liste des fichiers CSV dans un dossier.

0

Vous ne pouvez pas avoir « manuellement » additionner les soldes de compte, si vous pouvez utiliser les fonctions Excel à partir de votre application, la formule Excel en VBA serait:

Application.Sum(Range("A:A")) 

où A: A est la colonne A.

+0

Pourrait utiliser COM de PHP si s'exécutant sur Windows, mais il fonctionne sous Linux, il semble –

+0

Je suis sous Linux. Cependant, cela ne veut pas dire que cela n'aiderait pas à automatiser une partie du processus dans Windows et ensuite à amener les résultats dans Linux. –

0

Essayez d'utiliser CSVFix avec son option résumé. Il vous obtiendra plus de données que vous n'en avez besoin, mais devrait être facile à utiliser.

Sinon, cela semble être un bon usage pour Awk.

0

Pourquoi ne pas simplement un total automagiquement les soldes des comptes dans Excel avec une formule et les exporter avec le reste des données?

+0

Je pourrais le faire. Ce ne serait pas idéal (je préfère l'automatisation totale) mais cela pourrait s'avérer être la solution la plus simple. –

0

Un peu d'un angle différent: Faire usage du MySql CSV engine pour exposer vos fichiers CSV à Mysql puis effectuez une SQL normale SOMME.

Voir aussi: The CSV Storage Engine

+0

J'aime cette idée. Je regarderai plus pour voir si c'est une option viable. –