2010-10-17 3 views
0

Hey, essayant de trouver un moyen d'utiliser un fichier, je dois générer un insert SQL dans une base de données. Le fichier a plusieurs entrées de la forme:Analyser un fichier de valeurs pour le transformer en insertion SQL

100090 100090 bill smith 1998 

C'est un numéro d'identification, un autre identifiant (pas toujours le même), un nom complet et un an. Ceux-ci sont tous séparés par un espace. Fondamentalement ce que je veux est de pouvoir obtenir des variables de ces lignes comme je itère dans le fichier afin que je puisse, par exemple donner les valeurs sur chaque ligne les noms: id, id2, nom, année. Je veux ensuite les transmettre à un database.So pour chaque ligne id être capable de faire (en code pseudo)

INSERT INTO BLAH VALUES(id, id2,name , year) 

Ceci est en php, je remarqué que je ne l'ai pas souligné que ci-dessus, mais j'ai aussi essayé en utilisant grep afin de trouver la regex, mais ne peux pas trouver un moyen de coller le code: par exemple: "VALUES()" autour des informations du fichier.

Toute aide serait appréciée. Je suis un peu coincé sur celui-ci

Répondre

1

Essayez quelque chose comme ceci:

$fh = fopen('filename', 'r'); 
$values = array(); 
while(!feof($fh)) { 
    //Read a line from the file 
    $line = trim(fgets($fh)); 

    //Match the line against the specified format 
    $fields = array(); 
    if(preg_match(':^(\d+) (\d+) (.+) (\d{4})$:', $line, $fields)) { 
    //If it do match, create a VALUES() block 
    //Don't forget to escape the string part 
    $values[] = sprintf('VALUES(%d, %d, "%s", %d)', 
     $fields[1], $fields[2], mysqli_real_escape_string($fields[3]), $fields[4]); 
    } 
} 
fclose($fh); 

$all_values = implode(',', $values); 
//Check out what's inside $all_values: 
echo $all_values; 

Si le fichier est vraiment grand, vous devrez faire vos opérations d'encartage SQL dans la boucle au lieu de les sauver à la fin, mais pour les petits fichiers que je pense qu'il vaut mieux pour enregistrer toutes les valeurs à la fin afin que nous puissions faire une seule requête SQL.

+0

merci, cela a fonctionné parfaitement, a eu quelques problèmes que ma deuxième valeur avait un point décimal au milieu. Changé un peu et cela a fonctionné parfaitement. Merci beaucoup – kyassuru

1

Si vous pouvez compter sur la structure du fichier (et n'avez pas besoin d'effectuer d'autres vérifications/contrôles), pensez à utiliser LOAD DATA INFILE.

Des outils graphiques tels que HeidiSQL sont dotés d'excellentes boîtes de dialogue pour créer facilement des instructions mySQL entièrement fonctionnelles.

Sinon, PHP a fgetcsv() pour analyser les fichiers CSV.

0

Si toutes vos lignes ressemblent à celui que vous avez publié, vous pouvez lire le contenu du fichier dans une chaîne (voir http://www.ehow.com/how_5074629_read-file-contents-string-php.html)

Ensuite, utilisez la fonction PHP split pour vous donner chaque pièce de la requête. (Ressemble à preg_split() à partir de PHP 5.3).

Le tableau se présente comme suit:

myData[0] = 10090 
myData[1] = 10090 
myData[2] = Bill Smith 
myData[3] = 1998 

..... Et ainsi de suite pour chaque enregistrement

Ensuite, vous pouvez utiliser une boucle pour construire votre nifty requête.

for($i = 0, $i < (myData.length/4); $i+4) 
{ 
$query = 'INSERT INTO MyTABLE VALUES ($myData[$i],$myData[$i+1],$myData[$i+2],myData[$i+3])' 

//Then execute the query 
} 

Ce sera mieux et plus rapidement que l'introduction d'un outil tiers.

Questions connexes