Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    320

    Trasferire record da file.txt in DB mysql

    Ciao mi servirebbe un grosso aiuto
    ho la necessità di portare i records in files .txt in un database.
    Sono un elenco completo di nomi di ragni divisi per famiglia genere e specie
    i files della famiglia.txt contenenti i nomi sono circa 50 e i records complessivamente circa 40.000
    ogni famiglia contiene i genere e per ogni genere un numero variabile di specie come da esempio:



    family: Actinopodidae

    genus: Plesiolena
    species: Plesiolena bonneti (Zapfe, 1961)
    species: Plesiolena jorgelina Goloboff, 1994

    genus: Missulena
    species: Missulena bradleyi Rainbow, 1914
    species: Missulena dipsaca Faulder, 1995
    species: Missulena granulosa (O. P.-Cambridge, 1869)
    species: Missulena hoggi Womersley, 1943
    species: Missulena insignis (O. P.-Cambridge, 1877)
    genus: Actinopus
    species: Actinopus caraiba (Simon, 1889)
    species: Actinopus ceciliae Mello-Leitao, 1931
    species: Actinopus crassipes (Keyserling, 1891)
    species: Actinopus cucutaensis Mello-Leitao, 1941
    species: Actinopus dubiomaculatus Mello-Leitao, 1923
    etc.etc


    nel data base ogni records porterà la famiglia il genere e la specie
    ad esempio
    Famiglia Genere Specie
    Actinopodidae Missulena Missulena bradleyi
    Actinopodidae Missulena Missulena dipsaca
    Actinopodidae Missulena Missulena granulosa


    dai records specie si dovrà estrapolare solo la 2 e 3 parola

    con l'aiuto di Maurizio ho scritto una parte di codice e mi registra bene tutte le specie ma nn riesco ad abbinare Famiglia e Genere
    ecco il codice:

    if ($handle = opendir('Catalogo')) {
    while (false !== ($file1 = readdir($handle))) {

    if ($file1 != "." && $file1 != "..") {
    $file = file ("Catalogo/".$file1);


    $SpeciesArray = array();

    foreach($file as $row) //scorro l'array
    {

    if(ereg('^(species)', $row)) //se la riga inizia per species
    {
    $SingleRow = explode(':', $row);
    $SpeciesArray[] = trim($SingleRow[1]); //metto quello che c'è dopo il : nell'array
    }
    }

    sort($SpeciesArray); // ordino alfabeticamente l'array

    foreach($SpeciesArray as $FinalRow)
    {

    $var = explode(" ", $FinalRow);
    $FinalString = $var[0] ."-". $var[1]; //estraggo il nome della specie
    $inserisci = mysql_query("INSERT INTO ragni (Nome,img) VALUES (\"$FinalString\",'no')");

    }

    }
    }
    }



    Per favore datemi consigli per estrapolare anche Famiglia e Genere e abbinarli ad ogni specie
    se nn sono stato chiaro chiedetemi tutto


    Felicità e Prosperità a tutti

  2. #2
    Uhm... Non è molto semplice: si tratta di una sorta di parser del file.
    Potresti fare una cosa del genere:
    Codice PHP:
    if ($handle opendir('Catalogo')) {
    while (
    false !== ($file1 readdir($handle))) {

    if (
    $file1 != "." && $file1 != "..") {
    $file file ("Catalogo/".$file1);


    $species = array();

    $family="";
    $genus="";

    foreach(
    $file as $row//scorro l'array
    {
    $dati=explode(": ");//divido in ogni riga l'identificatore(es genus) dal valore
    $indent=$dati[0];//identificatore
    $value=$dati[1];//valore
    if($ident=="family")//se il valore è identificato da family
    $family=$value;//la famiglia presa in considerazione diventa quella identificata
    if($ident=="genus")//se il valore è identificato da genus
    $genus=$value;//il genere preso in considerazione diventa quello identificato
    if($ident=="species")//se il valore è identificato da species
    $species[$family][$genus][]=$value;//inserisco il valore in un array multidimensionale, identificandolo con family e genus
    }
    sort($species);
    foreach(
    $species as $family//scorro l'array
    {
    foreach(
    $species[$family] as $genus//scorro l'array
    {
    foreach(
    $species[$family][$genus] as $specie//scorro l'array
    {
    $inserisci mysql_query("INSERT INTO ragni (Specie,Genus,Family,img) VALUES ('$specie','$genus','$family','no')");
    if(
    $inserisci)
    echo 
    "la specie $specie, di genere $genus, appartenente alla famiglia $family, è stata inserita correttamente nel database";
    }
    }
    }
    }
    }

    Non ho provato lo script, ma dovrebbe andare, in pratica, oltre ad inserire il nome della specie nel database, inserisce anche la famiglia e il genere nei relativi campi.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    320
    Grazie proverò
    Felicità e Prosperità a tutti

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    320
    mi sembra giusto ma nn funziona

    ho modificato
    $dati=explode(": ");//divido in ogni riga l'identificatore(es genus) dal valore
    in
    $dati=explode(": ", $row);//divido in ogni riga l'identificatore(es genus) dal valore

    ma ho sempre l'errore
    NOTICE: Undefined variable: ident in ............
    Felicità e Prosperità a tutti

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    320
    ..dopo alcune prove e dopo un errore di compilazione
    ho questo errore

    Warning: Illegal offset type in C:\Programmi\Apache Software Foundation\Apache2.2\test\Lista Ragni\crea-lista-db-prova.php on line 43

    Warning: Invalid argument supplied for foreach() in C:\Programmi\Apache Software Foundation\Apache2.2\test\Lista Ragni\crea-lista-db-prova.php on line 43

    praticamente a questa riga :
    foreach($species[$family] as $genus) //scorro l'array


    Felicità e Prosperità a tutti

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    320
    Bhe ho risolto

    se a qualcuno può interessare una cosa del genere mi chieda il listato

    BUON NATALE A TUTTI

    Felicità e Prosperità a tutti

  7. #7
    Sono felice che tu abbia risolto, in ogni caso ho testato e migliorato lo script che ti avevo dato: ora funziona benissimo: dacci un'occhiata se ne hai voglia.

    Codice PHP:
    <html>
    <head>
    </head>
    <body>
    <div style="font-family:courier;">
    <?php
    $OK
    =0;
    $NO=0;
    if (
    $handle opendir('Catalogo')) {
    while (
    false !== ($file1 readdir($handle))) {

    if (
    $file1 != "." && $file1 != "..") {
    $file file ("Catalogo/".$file1);
    echo
    '<h1>File '.$file1.' aperto correttamente: INIZIO PARSING:</h1>';

    $species = array();

    $family="";
    $genus="";
    echo
    '<table border="1">';
    echo
    '<tr><td>identificatore</td><td>valore</td><td>family attuale</td><td>genus attuale</td></tr>';
    foreach(
    $file as $row//scorro l'array
    {
    echo
    '<tr>';
    $dati=explode(": ",$row);//divido in ogni riga l'identificatore(es genus) dal valore
    $ident=$dati[0];//identificatore
    if(count($dati)==2)
    echo 
    '<td>'.$ident.'</td>';
    $value=$dati[1];//valore
    if(count($dati)==2)
    echo 
    '<td>'.$value.'</td>';
    if(
    $ident=="family")//se il valore è identificato da family
    $family=$value;//la famiglia presa in considerazione diventa quella identificata
    if($ident=="genus")//se il valore è identificato da genus
    $genus=$value;//il genere preso in considerazione diventa quello identificato
    if($ident=="species")//se il valore è identificato da species
    $species[$family][$genus][]=$value;//inserisco il valore in un array multidimensionale, identificandolo con family e genus
    if(count($dati)==2)
    echo
    '<td>'.$family.'</td><td>'.$genus.'</td>';
    echo
    '</tr>';
    }
    echo 
    '</table>';
    echo 
    '<h1>Parsing completato con successo!</h1><h1>Inizio inserimento dei dati nel database</h1>';
    $fkeys=array_keys($species);
    echo
    '<h1>INIZIO ISPEZIONE ARRAY species:</h1>';
    echo
    '-famiglie totali: '.count($fkeys).'
    '
    ;
    echo
    '-elenco famiglie: '.implode(', ',$fkeys).'

    '
    ;
    for(
    $a=0;$a<count($species);$a++) //scorro l'array
    {
    $fam=$fkeys[$a];
    $gkeys=array_keys($species[$fam]);
    echo
    '<h2>'.($a+1).'.INIZIO ISPEZIONE ARRAY species.'.$fam.':</h2>';
    echo
    '-generi totali: '.count($gkeys).'
    '
    ;
    echo
    '-elenco generi: '.implode(', ',$gkeys).'

    '
    ;
    for(
    $b=0;$b<count($species[$fam]);$b++) //scorro l'array
    {
    $gen=$gkeys[$b];
    echo
    '<h3>'.($a+1).'.'.($b+1).'.INIZIO ISPEZIONE ARRAY species.'.$fam.'.'.$gen.':</h3>';
    echo
    '-specie totali: '.count($species[$fam][$gen]).'
    '
    ;
    echo
    '-elenco specie: '.implode(', ',$species[$fam][$gen]).'

    '
    ;
    echo
    '<h4>Inserimento...</h4>';
    for(
    $c=0;$c<count($species[$fam][$gen]); $c++) //scorro l'array
    {
    $specie=$species[$fam][$gen][$c];
    $inserisci = @mysql_query("INSERT INTO ragni (Specie,Genus,Family,img) VALUES ('$specie','$gen','$fam','no')");
    echo 
    '<nobr>'.($a+1).".".($b+1).".".($c+1)." inserimento della specie $specie, di genere $gen, appartenente alla famiglia $fam nel database...";
    if(
    $inserisci)
    {
    echo 
    'INSERIMENTO COMPLETATO CON SUCCESSO!</nobr>
    '
    ;
    $OK++;
    }
    else
    {
    echo 
    'ERRORE QUERY DI INSERIMENTO!
    '
    ;
    $NO++;
    }
    }
    }
    }
    }
    }
    }
    echo
    '<h1>Procedimento terminato: tutti i file sono stati esaminati e tutti i valori sono stati inseriti nel database.</h1>';
    echo
    '[b]Trasferimenti riusciti:[/b] '.$OK.';
    '
    ;
    echo
    '[b]Trasferimenti falliti:[/b] '.$NO.';
    '
    ;
    ?>
    </div>
    </body>
    </html>

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    320
    Sei mitico e complimenti per lo script veramente completo

    io ho risolto in modo molto semplice ma funzionale e te lo propongo per un parere :
    <?php

    $connessione = mysql_connect("localhost", "root", "220352")
    or die("Connessione non riuscita: " . mysql_error());
    //print ("Connesso con successo");
    mysql_select_db("animali");

    $i=0;
    if ($handle = opendir('Catalogo')) {
    while (false !== ($file1 = readdir($handle))) {

    if ($file1 != "." && $file1 != "..") {
    $file = file ("Catalogo/".$file1);

    $species = array();

    $family = "";
    $genus = "";

    foreach($file as $row) //scorro l'array
    {
    $i=$i+1;
    $dati=explode(": ", $row);//divido in ogni riga l'identificatore(es genus) dal valore
    $ident=$dati[0];//identificatore
    $value=$dati[1];//valore
    if($ident == "family")//se il valore è identificato da family
    { $family=$value;}//la famiglia presa in considerazione diventa quella identificata

    if($ident == "genus")//se il valore è identificato da genus
    {$genus=$value;}//il genere preso in considerazione diventa quello identificato

    if($ident == "species")//se il valore è identificato da species
    {$var = explode(" ", $value);
    $FinalString = $var[0]."-".$var[1];
    $specie=$FinalString;}//inserisco il valore in un array multidimensionale, identificandolo con family e genus
    if($family <>"" and $genus <>"" and $specie <>"" ){
    $inserisci = mysql_query("INSERT INTO ragni (Specie,Genere,Famiglia,img) VALUES ('$specie','$genus','$family','no')");
    echo "la specie $specie, di genere $genus, appartenente alla famiglia $family, &egrave; stata inserita correttamente nel database
    ";
    }
    }
    }
    }
    }

    ?>


    Grazie per il tuo fondamentale aiuto

    BUON NATALE a te e tutti i tuoi cari

    e Buone Feste anche a tutti partecipanti ai forum di HTML.it
    Felicità e Prosperità a tutti

  9. #9
    Complimenti! Il tuo script è semplice ma davvero molto funzioanle e veloce! Non avevo proprio pensato a una soluzione come questa, che però è decosmanete la migliore!

    Buona Natale anche a te!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.