Eredmény: 1 - 7 (7) összesen

Téma: CSV fájlok és Excel táblák elhelyezése MySQL adatbázisba

  1. #1
    Új tag
    Csatlakozott
    10-08-06
    Hozzászólás
    1
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás CSV fájlok és Excel táblák elhelyezése MySQL adatbázisba

    Sziasztok!
    Egy olyan megoldást keresek, aminek segítségével a mérnökeink könnyedén tudják a CSV fájlokat és az Excel táblák adatait a MySQL adatbázisunkba elhelyezni. Ha lehet, ne igényeljen sok kódolást, nem IT szakemberekről van szó

    Válaszotokat előre is köszönöm!

    T.



  2. #2
    Bölcs
    Csatlakozott
    09-12-31
    Hozzászólás
    620
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: CSV fájlok és Excel táblák elhelyezése MySQL adatbázisba

    A phpMyAdmin import funkcióját ajánlanám, akár xls-ből is eldolgozik, picit játszani kell vele, de nem nehéz



  3. #3
    MinderBinder edem logója
    Csatlakozott
    09-09-02
    Hely
    Budapest
    Hozzászólás
    1.093
    Thanked 1 Time in 1 Post

    Alapbeállítás re: CSV fájlok és Excel táblák elhelyezése MySQL adatbázisba

    Ha érdekel, írtam CakePHP-ban egy dinamikus admin programot adatbázishoz, ennek egyik részében .csv kezelés is van, ami így néz ki:

    PHP kód:
      // feltölti a termékeket csv file-ból
        
    private function manageCsv ($csv) {
            
    $this->loadModel('Product');
            
    // megengedett fejlécek
            
    $heads = array(
                
    'itemno'            => array('cikkszám'),
                
    'name'              => array('Megnevezés'),
                
    'description'       => array('internet megnevezés'),
                
    'longdesc'          => array('Bőveb leírás'),
                
    'price'             => array('nettó listaár'),
                
    'gross'             => array('Bruttó listaár')
            );
          
    // ha meg tudjuk nyitni a file-t
            
    $row = -1;
            if ((
    $handle fopen($csv"r")) !== false) {
                if (isset(
    $this->data['Product']['category_id'])) {
                    
    $category_id $this->data['Product']['category_id'];
                }
                else {
                    
    $this->Session->setFlash('Hiányzik a kategória, kérem próbálja meg újra.''default', array('class' => 'hibauzenet'));
                    
    $this->redirect('/_admin/');
                }
                unset(
    $this->data);
                while ((
    $data fgetcsv($handle1000";")) !== false) {
                    foreach(
    $data as $key => $val) {
                        
    $data[$key] = mb_convert_encoding(trim($val), 'UTF-8''ISO-8859-2');
                    }
                  
    // az első sornál eltesszük a fejlécet
                    
    if ($row == -1) {
                        foreach (
    $data as $key => $val) {
                            foreach(
    $heads as $num => $head) {
                                if (
    in_array($val$head)) {
                                    
    $places[$num] = trim($key);
                                }
                            }
                        }
                    }
                    else {
                        foreach (
    $data as $key => $val) {
                            foreach(
    $places as $db => $place) {
                                if (
    $key == $place) {
                                    if (!empty(
    $val)) {
                                        if (
    $db == 'price' || $db == 'stored' || $db == 'reserved') {
                                            
    $val str_replace(','''$val);
                                        }
                                        
    $this->data[$row]['Product'][$db] = $val;
                                    }
                                    if (
    $db == 'itemno') {
                                        
    $prod_id $this->Product->find('first', array('conditions' => array('Product.itemno' => $val), 'recursive' => 0'fields' => array('Product.id''Product.sef_url''Product.menu_title''Product.page_title''Product.active')));
                                        if(
    $prod_id) {
                                            
    $this->data[$row]['Product']['id'] = $prod_id['Product']['id'];
                                            
    $this->data[$row]['Product']['menu_title'] = $prod_id['Product']['menu_title'];
                                            
    $this->data[$row]['Product']['page_title'] = $prod_id['Product']['page_title'];
                                            
    $this->data[$row]['Product']['active'] = $prod_id['Product']['active'];
                                        }
                                    }
                                }
                            }
                        }
                    
    $this->data[$row]['Product']['category_id'] = $category_id;
                    
    $this->data[$row]['Product']['sef_url'] = $this->getStringAsURL($this->data[$row]['Product']['name'])."-".$this->data[$row]['Product']['itemno'];
                    if (!isset(
    $this->data[$row]['Product']['menu_title'])) {
                        
    $this->data[$row]['Product']['menu_title'] = $this->data[$row]['Product']['name'];
                    }
                    if (!isset(
    $this->data[$row]['Product']['page_title'])) {
                        
    $this->data[$row]['Product']['page_title'] = $this->data[$row]['Product']['name'];
                    }
                    if (!isset(
    $this->data[$row]['Product']['active'])) {
                        
    $this->data[$row]['Product']['active'] = 1;
                    }
                    }
                    
    $row++;
                }
                foreach(
    $this->data as $key => $val) {
                    
    $this->Product->create();
                    if (
    $this->Product->save($val)) {
                        ;
                    }
                    else {
                        
    $this->Session->setFlash("Hiba a $key. termék rögzítésekor. (".$val['Product']['name']."), kérjük ellenőrizze a feltöltött adatokat."'default', array('class' => 'hibauzenet'));
                        
    $this->redirect('/_admin/');
                    }
                }
             
    // takarítás
                
    fclose($handle);
                
    unlink($csv);
                
    $this->Session->setFlash('.csv állomány feltöltése sikeres''default', array('class' => 'uzenet'));
                
    $this->redirect('/_admin/');
            }
            else {
                
    $this->Session->setFlash('Érvénytelen .csv fájl, kérjük próbálja meg újra.''default', array('class' => 'hibauzenet'));
                
    $this->redirect('/_admin/');
            }
        } 
    A heads-ba kell beletenni, hogy milyen heading-ek lehetnek a .csv-ben és azok milyen mezőbe kerüljenek az adatábzisban, illetve van egy kódolás figyelő is.

    Nálam a termékek kategóriákhoz tartoznak, azért van category_id. Ha nem cake-t használsz, akkor a logikát szerintem ki tudod belőle következtetni. A heads-ba megadhatsz a mezőnév után többféle hadinget is, amit keres, a .csv-dben pedig nem számít az oszlopok sorrendje.

    A getStringAsUrl() függvény, sef-esíti az url-t, valahogy így néz ki:

    PHP kód:
            protected function getStringAsURL($string) {
                
    $unPretty = array('/Í/','/ú/','/Ú/','/í/','/Ó/','/ó/','/ő/','/Ő/','/É/','/é/','/á/''/ö/''/ü/''/Á/''/Ö/''/Ü/''/Ű/''/\s?-\s?/''/\s?_\s?/''/\s?\/\s?/''/\s?\\\s?/''/\s/''/"/''/\'/');
                
    $pretty   = array('I','u','u','i','o','o','o','O','E','e','a''o''u''A''O''U''u''-''-''-''-''-''''');

                
    $semi_pretty low(preg_replace($unPretty$pretty$string));
                
    $semi_pretty str_replace('.''_'$semi_pretty);
                
    $semi_pretty str_replace('(''_'$semi_pretty);
                
    $semi_pretty str_replace(')''_'$semi_pretty);
                
    $semi_pretty str_replace('+''_'$semi_pretty);
                
    $semi_pretty str_replace(',''-'$semi_pretty);
                
    $semi_pretty str_replace(' ''-'$semi_pretty);
                
    $pretty_str str_replace(':''-'$semi_pretty);

                return 
    $pretty_str;
            } 



    Utoljára módosítva: edem által : 2010-08-06 12:18
    // Only illogics can find
    // hidden flaws in a straight logic line

  4. #4
    Bölcs huncyrus logója
    Csatlakozott
    07-04-26
    Hely
    EU :)
    Hozzászólás
    541
    Begyűjtött 4 köszönetet
    4 hozzászólásával

    Alapbeállítás re: CSV fájlok és Excel táblák elhelyezése MySQL adatbázisba

    Itt egy még egyszerűbb, én ezt használom /najó, inkább csak ilyesmit, ez egy nyers verzió...
    Kód:
    LOAD DATA INFILE '/tmp/test.txt' INTO TABLE test
      FIELDS TERMINATED BY ','  LINES STARTING BY 'xxx';
    És itt a lényeges manual részek:
    http://dev.mysql.com/doc/refman/5.5/en/load-data.html
    http://search.mysql.com/search?site=...ata&lr=lang_en

    Gyak direkt loadolás. Csv-re ennél gyorsabb és jobb nincs. Plussz erőforrás barát is.


    Cyrusmagus.hu - Informatika, Fantasy, Blog, Irások

  5. #5
    Új tag
    Csatlakozott
    10-08-11
    Hozzászólás
    1
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: CSV fájlok és Excel táblák elhelyezése MySQL adatbázisba

    sziasztok.
    A Konsys cég által készített, AVReporter nevű energiamenedzsment szoftver képes elvégezni ezt a feladatot.
    A cég hivtalalos honlapján találhattok róla bővebb információkat.



  6. #6
    MinderBinder edem logója
    Csatlakozott
    09-09-02
    Hely
    Budapest
    Hozzászólás
    1.093
    Thanked 1 Time in 1 Post

    Alapbeállítás re: CSV fájlok és Excel táblák elhelyezése MySQL adatbázisba

    Idézet huncyrus eredeti hozzászólása Hozzászólás megtekintése
    Itt egy még egyszerűbb, én ezt használom /najó, inkább csak ilyesmit, ez egy nyers verzió...
    Kód:
    LOAD DATA INFILE '/tmp/test.txt' INTO TABLE test
      FIELDS TERMINATED BY ','  LINES STARTING BY 'xxx';
    És itt a lényeges manual részek:
    http://dev.mysql.com/doc/refman/5.5/en/load-data.html
    http://search.mysql.com/search?site=...ata&lr=lang_en

    Gyak direkt loadolás. Csv-re ennél gyorsabb és jobb nincs. Plussz erőforrás barát is.
    Ez lehet, de ebben nem tudsz (vagy igen?) validálni, illetve én úgy írtam meg az algoritmust, hogy az oszlopok sorrendje irreleváns legyen, ha nincs meg minden oszlop az sem gond, de a neveik fontosak.



  7. #7
    Bölcs huncyrus logója
    Csatlakozott
    07-04-26
    Hely
    EU :)
    Hozzászólás
    541
    Begyűjtött 4 köszönetet
    4 hozzászólásával

    Alapbeállítás re: CSV fájlok és Excel táblák elhelyezése MySQL adatbázisba

    Bocsi, teljesen igazad van, ez (amit írtam) csak és kizárólag a "gyors" és "fix" metódusra jó. Validálásra, meg bonyolultabb funkciókra inkább óvatosan ajánlatos csak

    Igazi megoldásnak tény, hogy edem példáját jobban ajánlom



A téma címkéi:

Könyvjelzők

Hozzászólás szabályai

  • Új témákat nem hozhatsz létre
  • Válaszokat nem küldhetsz
  • Fájlokat nem csatolhatsz
  • A hozzászólásaidat nem módosíthatod
  •