Import danych do bazy z plku .txt

0

Witam,
posiadam plik .txt z dużą ilościa danych, które wyglądają tak:

#IDO#zsp19/41?IDO?
#IID#10000?IID?#PID#57?PID?#EID#0?EID?
#RDO#element zespołu?RDO?
#RIN#zabytek?RIN?
#NZW#Obrączki, srebro pr. 84, waga ok. 2 g łącznie, bez napisów, gładkie.?NZW?
#SNZ#Obrączki, srebro pr. 84, waga ok. 2 g łącznie, bez napisów, gładkie.?SNZ?
#SRD#dokument?SRD?
#RDZ#dokument?RDZ?<RDZ>
#PIN#d:\monaobrokrzei\nowina-konopka\nowina-konopka różne\mzm-zsp19_41.jpg?PIN?#PI1#T?PI1?#PI2#T?PI2?#PI3#T?PI3?#PI4#T?PI4?#PIR#pliki graficzne?PIR?<PIN>

Chciałbym zaimportować do bazy MySQL (na stronę www) dane z tego pliku.
Interesują mnie stąd głównie pola #NZW#, #SRD# i #PIN#, które miałyby być zaimportowane do tabeli przedmioty do odpowiadających im pół nazwa, kategoria i obrazek.
W jaki sposób mógłbym to to zrobić?

0

Cze, napisz sobie skrypt w PHP, który ci go przetworzy i następnie wgra do bazy danych.

30 minut pracy.

Natomiast, nie znam jakiegoś konwertera, który Ci to zrobi.

0

Na razie napisałem coś takiego:

$connection = @mysql_connect('localhost', 'xxx', 'xxx')
or die('Brak połączenia z serwerem MySQL');
$db = @mysql_select_db('xxx', $connection)
or die('Nie mogę połączyć się z bazą danych');


$tresc = file_get_contents('plik.txt');

preg_match_all("/MZM\-.*\d/i", $tresc, $znalezione); //MZM-CokolwiekLiczba


 foreach ($znalezione as $ciag) {
	 for ($i=0; $i<681; $i++) {
		 echo "\nNumer ID: " . $ciag[$i] . "\n";
		 
		 $ins = @mysql_query("INSERT INTO przedmioty SET numer_katalogowy='$ciag[$i]'");
		 	if($ins) echo "Rekord został dodany poprawnie";
			else echo "Błąd nie udało się dodać nowego rekordu";
		
		}
   } 


mysql_close($connection);

Skrypt znajduje wszystkie numery katalogowe w pliku tekstowym i zapisuje je po kolei do tabeli przedmioty, do pola numer_katalogowy.
Nie wiem jednak jak zrobić by został dodany kompletny wpis, to znaczy z każdym przejściem pętli żeby do tabeli był zapisywany rekord zawierajacy numer_katalogowy, kategorię do której zostanie dodany przedmiot (np. jesli w pliku tekstowym mamy #SRD#dokument?SRD? to do kategorii o numerze id 1, a jeśli #SRD#obraz?SRD? to do kategorii o id 2 itp.) oraz opis przedmiotu i ścieżkę do zdjęcia.

Zawartość pliku tekstowego (mały fragment):

#IDO#MZM-47?IDO?
#IID#10001?IID?#PID#47?PID?#EID#0?EID?
#RDO#pojedynczy obiekt?RDO?
#RIN#zabytek?RIN?
#NZW#Obraz "Kwiaty" olej, płyta pilśniowa.?NZW?
#SNZ#Obraz "Kwiaty" olej, płyta pilśniowa.?SNZ?
#SRD#obraz?SRD?
#RDZ#obraz?RDZ?<RDZ>



#IDO#MZM-48?IDO?
#IID#10001?IID?#PID#48?PID?#EID#0?EID?
#RDO#pojedynczy obiekt?RDO?
#RIN#zabytek?RIN?
#NZW#Paszport pani Komorzyckiej z Chmielewa z 1916r.?NZW?
#SNZ#Paszport pani Komorzyckiej z Chmielewa z 1916r.?SNZ?
#SRD#dokument?SRD?
0

Osiągnąłem już to co chciałem, prawie. :D

    <?php
     
    $connection = @mysql_connect('localhost', 'xxx', 'xxx')
    or die('Brak połączenia z serwerem MySQL');
    $db = @mysql_select_db('xxx', $connection)
    or die('Nie mogę połączyć się z bazą danych');
     
     
     
    $tresc = file_get_contents('plik.txt');
     
    preg_match_all("/IDO\#.*\?IDO\?/i", $tresc, $znalezione);
    preg_match_all("/SNZ\#.*\?SNZ\?/i", $tresc, $znalezione2);
    preg_match_all("/SRD\#.*\?SRD\?/i", $tresc, $znalezione3);
    preg_match_all("/PIN\#.*\?PIN\?/i", $tresc, $znalezione4);
    preg_match_all("/NZW\#.*\?NZW\?/i", $tresc, $znalezione5);
     
    foreach ($znalezione as $ciag) {	//id
    foreach ($znalezione2 as $ciag2) {	//nazwa
    foreach ($znalezione3 as $ciag3) { //kategoria
    foreach ($znalezione4 as $ciag4) { //zdjecie
    foreach ($znalezione5 as $ciag5) { //opis
     
     
    for ($i=0; $i<681; $i++) {
     
    $ciag[$i] = substr($ciag[$i], 4, -5);
    $ciag2[$i] = substr($ciag2[$i], 4, -5);
    $ciag3[$i] = substr($ciag3[$i], 4, -5);
    $ciag4[$i] = substr($ciag4[$i], 4, -5);
    $ciag5[$i] = substr($ciag5[$i], 4, -5);
     
    if ($ciag3[$i]=='#SRD#dokument?SRD?') {$id=1;}
    else $id=2;
     
    $ins = @mysql_query("INSERT INTO przedmioty SET param='par_Numer katalogowy@@:@@$ciag[$i]', name='$ciag2[$i]', category_id='$id', image_url='$ciag4[$i]', description='$ciag5[$i]'");
    if($ins) echo "Rekord został dodany poprawnie";
    else echo "Błąd nie udało się dodać nowego rekordu";
     
    }
 }}}}} 
   
mysql_close($connection);
								
?>

Może nie jest za piękne ale działa, mam tylko jeden problem.
Jeśli przy przedmiocie nie ma zdjęcia to w pliku tekstowym wpis #PIN#images/zdjecie.jpg?PIN? nie istnieje. Dodałem więc w pliku w edytorze tekstowym automatycznie pusty
wpis
#PIN#?PIN? tam gdzie go nie ma. To już jest ok.
Problem pojawia się gdy do jednego rekordu mamy kilka zdjęć, czyli kilka razy w pliku do jednego przedmiotu
#PIN#images/zdjecie.jpg?PIN?
#PIN#images/zdjecie2.jpg?PIN? itd.
W takim wypadku jak idzie pętla to zdjęcie w pewnym momencie będzie miało inny numer $ciag4[$i] niż nazwa przedmoiotu $ciag2[$i] , opis przedmiotu $ciag5[$i] itd.

Jeśli w bazie danych do danego przedmiotu zostanie przydzielonych kilka sciezek do zdjeć oddzielonych średnikiem to tak moze myć. Ale opcja z tylko jednym zdjęciem będzie zadowalająca.

1 użytkowników online, w tym zalogowanych: 0, gości: 1