Question extracton rapide de données d'un GROS csv

Plus d'informations
il y a 10 ans 7 mois #15640 par Gabriel
ou sinon....
utiliser oledb et les drivers d'access

avec import-csv sur un fichier de 256.000 entrée (45Mo) ca prend 45s, avec oledb 3s.

B)

ben je suis content, je ne vais pas avoir besoin de passer par une bdd (ms access , MS SQL Compact ou SQLite)

merci a vous deux.

pour ceux que ca interesse un exemple:
[code:1]
$filepath = \"C:\chemindesCSV\"

$connString = \"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=`\"$filepath`\";Extended Properties=`\"text;HDR=yes;FMT=Delimited`\";\"

$qry = 'SELECT * FROM [personnel.csv] WHERE ID_PERSO=A123456'

$conn = new-object System.Data.OleDb.OleDbConnection($connString)
$conn.open()
$cmd = new-object System.Data.OleDb.OleDbCommand($qry,$conn)
$da = new-object System.Data.OleDb.OleDbDataAdapter($cmd)
$dt = new-object System.Data.dataTable
$null = $da.fill($dt)
$conn.close()
$dt
[/code:1]

Choses à savoir:
Il faut utiliser en fonction de la plateforme les drivers 32 ou 64b (les 2 sont telechargeable www.microsoft.com/en-us/download/details.aspx?id=13255 ), si vous lancer le script dans un powershell 64b (par defaut sous Windows Server 2012 et Windows 8), alors il faut les drivers 64b

Par defaut OLEDB, gere les fichier CSV qu'avec des virgule, donc si votre CSV utilise des \";\", il faut creer un fichier schema.ini dans le dossier des CSV qui contient
[code:1]
schema.ini
[fichier1.csv]
ColNameHeader=True
Format=Delimited(;«»)
[fichier2.csv]
ColNameHeader=True
Format=Delimited(;«»)
[/code:1]
Soit dans la connectionString vous indiquer que les csv ont un entete \"HDR=yes\", soit dans le fichier schema vous mettez \"ColNameHeader=True\"

le dossier est considéré comme votre bdd, et chaque fichier csv est alors considéré comme une table

l'objet $dt est tout simple une table avec les infos récupérées

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

Plus d'informations
il y a 10 ans 7 mois #15643 par Laurent Dardenne
tonic8 écrit:

avec import-csv sur un fichier de 256.000 entrée (45Mo) ca prend 45s, avec oledb 3s.

Joli !

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 7 mois #15661 par Madrolle
Bon je vais faire au plus simple et bourin, ça semble correspondre au besoin...

73 Mo
377 500 lignes
13 secondes pour en sélectionner 17849

[code:1]
Get-Content .\monFichier.csv | Select-String \"A1\"
[/code:1]

rien n’empêche de se servir du résultat pour enchaîner avec une méthode plus fine pour optimiser.

Désolé pour le manque d'imagination... :huh:<br><br>Message édité par: Perso, à: 21/08/13 12:04

ShellDealer sur Twitter

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

Plus d'informations
il y a 10 ans 7 mois #15664 par Matthew BETTON
Perso écrit:

Bon je vais faire au plus simple et bourin, ça semble correspondre au besoin...

73 Mo
377 500 lignes
13 secondes pour en sélectionner 17849

[code:1]
Get-Content .\monFichier.csv | Select-String \&quot;A1\&quot;
[/code:1]

rien n’empêche de se servir du résultat pour enchaîner avec une méthode plus fine pour optimiser.

Désolé pour le manque d'imagination... :huh:&lt;br&gt;&lt;br&gt;Message édité par: Perso, à: 21/08/13 12:04


Pas tout à fait, parce que du coup tu ne sélectionne pas uniquement les lignes dont la propriété \&quot;ID\&quot; contient la chaîne \&quot;A1\&quot;... Mais également toutes celles qui contiennent \&quot;A1\&quot; pour n'importe quelle autre propriété.<br><br>Message édité par: Matthew BETTON, à: 21/08/13 12:54

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

Plus d'informations
il y a 10 ans 7 mois #15666 par Madrolle
Avec ce patern, ça règle le problème ',A1'
ou la variante qui va bien
',A1,'
';A1;'
\&quot;,A1$\&quot;

après, ça dépend des particularités de son fichier

ShellDealer sur Twitter

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

Plus d'informations
il y a 10 ans 7 mois #15672 par Matthew BETTON
Perso écrit:

Avec ce patern, ça règle le problème ',A1'
ou la variante qui va bien
',A1,'
';A1;'
\&quot;,A1$\&quot;

après, ça dépend des particularités de son fichier


Cela ne me convainc pas :(

Parce que le séparateur peut apparaître dans un champ... Bref, tu ne peux être sur à 100 % que cela va fonctionner dans tous les cas.

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

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