Bazy Danych

Perl FAQ | RecentChanges | Preferences

1. Jak zacząć pracę z bazą danych
2. Co zrobić z plikiem dbf?
3. Jak czytać pliki dbm?
4. A co z Excelem (CSV - plik średnikowy/przecinkowy)?
5. A z Accessem?
6. Czy jest coś do MS-SQL?
7. Czym parsować XML/SGML?

1. Jak zacząć pracę z bazą danych

Do poprawnego działania potrzebny jest działający serwer baz danych (może być gdzieś w sieci) oraz lokalny klient (lub biblioteki - drajwery).

  - ściągnać i zainstalować DBI
  - ściągnąć i zainstalować odpowiednie DBD
  - poczytać odpowiednie manuale (np. perldoc DBD::mysql) 

Ogólnie schemat jest następujący:

 use DBI;

 $dbname="nazwabazy";
 $dbdbd="mysql";	#lub Sybase lub Pg lub inna nazwa DBD
 $username="nazwauzytkownika";
 $password="haslo";
 $table="tabelka";

  my $dbh = DBI->connect( "dbi:$dbdbd:$dbname", $username, $password);
  my $sth = $dbh->prepare( "select * from $table" );
  $sth->execute() || die $sth->errstr;
  while ( my $row = $sth->fetchrow_arrayref() ) { print "@{$row}\n"; }
  $dbh->disconnect();

2. Co zrobić z plikiem dbf?

Istnieją dwa konkurencyjne rozwiązania do dbf i FoxPro, są to: Xbase oraz XBase. Na podstawie tego drugiego powstał interfejs przez DBI, czyli sterownik DBD-XBase.

 use XBase;
 my $table = new XBase("dbase.dbf") or die XBase->errstr();
 for (0 .. $table->last_record())  {
  my ($deleted,$id,$msg) = $table->get_record($_,"ID","MSG");
  print "$id:\t$msg\n" unless $deleted;
 }

3. Jak czytać pliki dbm?

Nie należy już stosować funkcji dbmopen, itp. lecz tie.

 use GDBM_File ;
 tie %hash, 'GDBM_File', $filename, &GDBM_WRCREAT, 0640;
 $hash{bzt} = 'tralala';

dodatkowe informacje:

 perldoc NDBM_File, DB_File, AnyDBM_File

Do wielopoziomowych struktur dbm służy moduł MLDBM (multi-level DBM) lub Storable.

4. A co z Excelem (CSV - plik średnikowy/przecinkowy)?

Do współpracy z Excelem warto używać obsługi przez DBI (DBD::Excel) lub formatu CSV (DBD::CSV). Alternatywy to Text::CSV oraz Tie::CSV.

Proste dzielenie pól po przecinkach z cudzysłowem daje wyrażenie

  @pola = m/([^,]*|".*?"),?/g;

Z platformy Windows zaleca się moduł Win32::OLE.

 $excel=Win32::OLE->new('Excel.Application','Quit');
 $plik=$excel->Workbooks->Open($nazwapliku);
 $i=1;
 while($plik->Worksheets($i)){
   $ark=$plik->Worksheets($i);
   $zawartosc=$ark->UsedRange()->{Value};
   $i++;
 }
 $excel->Quit; 

Ostatecznie można wykorzystać moduły Spreadsheet::WriteExcel i Spreadsheet::ParseExcel, lub program zewnętrzny xlhtml, który pozwala skonwertować plik xls do ascii (z różnymi opcjami).

5. A z Accessem?

DBD::ODBC (lub DBD::ADO - o ile ma sie sterowniki ADO w systemie [na Win NT - min. SP4]), zobacz też komentarze niżej.

 use DBI;
 my $baza = 'd:\test\test.mdb';
 my $driver = 'Microsoft Access Driver (*.mdb)';
 my $dsn = "driver=$driver;dbq=$baza";
 my $dbh = DBI->connect("dbi:ODBC:$dsn",",") or die $DBI::errstr;

Jest też Win32::ODBC, ale jest wolny i niedoskonały.

6. Czy jest coś do MS-SQL?

DBD::Sybase, lub DBD::ODBC.

Pierwszy jest szybszy i mniej pamięciożerny. MS SQL ma w sobie silnik Sybase'a i modul ten w 98% przypadków świetnie się do MS SQL'a nadaje.

Pierwszy jest raczej dla środowiska Unix (i bezpłatny) drugi raczej dla Windows. (Uwaga! dla NT 4.0 Workstation z NTFS, i ActivePerl'a 5.6, potrzeba SP5, lub wiecej, bo inaczej mogą pojawić się kłopoty z prawami dostępu skryptu do microsoftowych sterowników jet)

7. Czym parsować XML/SGML?

 use XML::Parser;
 $p = new XML::Parser(Style => 'Debug');
 $p->parsefile('plik.xml');

Poza tym moduł XSLT, a także do czytania XML - XML::XPath, a do manipulacji - XML::DOM. Prosty moduł to XML::Simple:

 my $xs = new XML::Simple(ProtocolEncoding => 'ISO-8859-2');

Inny przykład:

 use XML::LibXSLT;
 use XML::LibXML;
 my $parser              = XML::LibXML->new();
 my $xslt                = XML::LibXSLT->new();
 my $sklep = $parser->parse_file( 'sklep.xml' );
 my $index_doc           = $parser->parse_file( 'index.xsl' );
 my $index_styl  = $xslt->parse_stylesheet( $index_doc );
 $results = $index_styl->transform( $sklep );
 $xx = $index_styl->output_string( $results );

Więcej implemetacji można znaleźć pod:

 http://www.xml.com/pub/rg/Perl_Implementations
 http://perl-xml.sourceforge.net/faq/#cpan_modules


Perl FAQ | RecentChanges | Preferences
This page is read-only | View other revisions
Last edited July 27, 2006 1:57 pm by Juszkiew (diff)
Search:
Strona znajduje się na serwerze KT AGH.