Forum Webscript.Ru

Программирование => Perl => Тема начата: hoochie от 15 Февраля 2005, 18:43:56

Название: perl:Как конвертировать дату из текстового файла в MySql???
Отправлено: hoochie от 15 Февраля 2005, 18:43:56
есть некий текстовый файл, который содержит инфу типа

17/11/2004 05:38:08, текст1, xxx.xxx.xxx.xxx:xxxxx, текст2

и так построчно...
где ххх.ххх.ххх.ххх:ххххх - айпи адрес:порт

задача(желательно на перле):

1. сделать что бы заносились даты в таблицу MySQL (они просто как бы игнорируются или формат даты неверен)
2. чтобы в таблицу заносились только айпи адреса без портов

вот таким скриптом я это делаю

#!/usr/bin/perl
use DBI;

$dbh=DBI->connect("DBI:mysql:database=DB;host=$host",
"user","pwd") || die print "Can\'t connect";
print "connect sucsessfully!\\nFor tansfer press ENTER...";
<>;
$dbh->do("LOAD DATA local INFILE \'/home/test/123/test.txt\' REPLACE
INTO table test FIELDS TERMINATED BY \';\' OPTIONALLY
ENCLOSED BY \'\\"\' LINES TERMINATED BY \'\\n\'")||die print "\\nfailed";
print "transfer OK!";
<>;

подскажите в чем ошибка

поля таблицы следующие:

date timestamp (пробовал datetime - тож не помогает)
col1 varchar
ip varchar
col2 varchar
Название: perl:Как конвертировать дату из текстового файла в MySql???
Отправлено: NeoNox от 15 Февраля 2005, 19:14:29
Цитировать
hoochie:
есть некий текстовый файл, который содержит инфу типа

17/11/2004 05:38:08, текст1, xxx.xxx.xxx.xxx:xxxxx, текст2

Цитировать
hoochie:
FIELDS TERMINATED BY \';\'
Название: perl:Как конвертировать дату из текстового файла в MySql???
Отправлено: hoochie от 15 Февраля 2005, 20:31:46
прошу прощения, там FIELDS TERMINATED BY \', \'
но тем не менее, это не помогает...

именно поля содержащие дату просто не заносит в таблицу, остальное в порядке вроде....
Название: perl:Как конвертировать дату из текстового файла в MySql???
Отправлено: commander от 16 Февраля 2005, 10:16:19
hoochie
дебажить запрос не пробовал?
Название: perl:Как конвертировать дату из текстового файла в MySql???
Отправлено: Skif от 17 Февраля 2005, 21:12:28
Вот пример абсолютно рабочего запроса подобного типа(данные уже считанны из файла и занесены в массив):

my $insert = "INSERT INTO  $table (time_stamp,elaps,client_ip,
    type_http,
    size,
    method,
    url,
    ident,
    host_name,
    mime,
    chanel) VALUES (?,?,?,?,?,?,?,?,?,?,?)";

foreach my $line_arr (@access_arr_in) {

my ($time_stamp,$elaps,$client_ip,$type_http,$size,$method,$url,$ident,$host_name,$mime,$chanel)=split(/[\\s\\t]+/,$line_arr);
$time_stamp=int $time_stamp;
chomp $chanel;
$sth->execute ($time_stamp,$elaps,$client_ip,$type_http,$size,$method,$url,$ident,$host_name,$mime,$chanel);

}

$sth->finish;

гораздо проще, по моему разумению, считать в массив и от туда загонять данные в базу. Врят ли у вас гигабайтные фалы...
Потом проще отработать сие на простом массиве в одну две записи и вы сразу же увидите проблему, причем, желательно весь запрос проверить сначала в mysql.
Возможно у вас не совпадают тип столюца с вводимыми данными.
P.S.:
там где split должно быть так (неотображает):
my ($time_stamp,$elaps,$client_ip,$type_http,$size,$method,$url,$ident,$host_name,$mime,$chanel)=split(/[\\s\\t]+/,$line_arr);
Название: perl:Как конвертировать дату из текстового файла в MySql???
Отправлено: hoochie от 18 Февраля 2005, 16:44:54
Это как альтернатива, если я правильно понял....
но меня интересует почему LOAD DATA INFILE не справляется...

если я массивом считываю данные, то загоняются без проблем...

2commander как ты предлагаешь это сделать???
Название: perl:Как конвертировать дату из текстового файла в MySql???
Отправлено: NeoNox от 18 Февраля 2005, 17:07:09
Цитировать
hoochie:
как ты предлагаешь это сделать???

почитать perldoc DBI
в разделе METHODS COMMON TO ALL HANDLES
Название: perl:Как конвертировать дату из текстового файла в MySql???
Отправлено: hoochie от 18 Февраля 2005, 17:43:21
спасибо, будем разбираться...