Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Импорт из текстового файла в базу данных
 
 автор: Justin Marty   (17.07.2008 в 10:05)   письмо автору
 
 

Извените меня но я хочу справедливости)))....вот есть БД в txt формате где описано следующее

3653754368    3653754623    217.199.222.0 - 217.199.222.255    RU    Москва    Москва    Центральный    ASSIGNED PA
3653754624    3653754879    217.199.223.0 - 217.199.223.255    RU    Москва    Москва    Центральный    ASSIGNED PA
3653758976    3653760255    217.199.240.0 - 217.199.244.255    RU    Екатеринбург    Свердловская область    Уральский    ASSIGNED PA
3653759488    3653759503    217.199.242.0 - 217.199.242.15    RU    Екатеринбург    Свердловская область    Уральский    ASSIGNED PA


Есть ли пример скрипта, который бы это кидал в Mysql)))...оч-оч-оч-очень! нужно (просто другие способы определениия Российских Городов И областей сегодня ночью потерпели фиаско))))..

   
 
 автор: mihdan   (17.07.2008 в 11:21)   письмо автору
 
   для: Justin Marty   (17.07.2008 в 10:05)
 

Обычным csv парсером пропарси, сформировав SQL запрос

   
 
 автор: dirol   (17.07.2008 в 11:22)   письмо автору
 
   для: mihdan   (17.07.2008 в 11:21)
 

<?


     $list 
file_get_contents("text.txt");
     
$list explode("\n"$list);

     foreach  (
$list as $param){
     
$param explode("    "$param);
     echo 
"$param[0]-$param[1]-$param[2]-$param[3]-$param[4]-$param[5]-$param[6]-$param[7]\n<br />";
     
mysql_query("INSERT INTO table (param1, param2, param3, param4, param5, param6, param7) VALUES ('$param[0]', '$param[1]', '$param[2]', '$param[3]', '$param[5]', '$param[6]', '$param[7]')");     
    }
?>

   
 
 автор: mihdan   (17.07.2008 в 11:24)   письмо автору
 
   для: dirol   (17.07.2008 в 11:22)
 

Лучше сначала сформировать SQL а потом его выполнить, но не гонять енто в цикле, а в основном правильно

   
 
 автор: Justin Marty   (17.07.2008 в 11:32)   письмо автору
 
   для: mihdan   (17.07.2008 в 11:24)
 

...а как быть с таким делом как область? ведь например СВЕРДЛОВСКАЯ ОБЛАСТЬ тоже пробелом разделена??

   
 
 автор: Antohins   (17.07.2008 в 11:36)   письмо автору
 
   для: Justin Marty   (17.07.2008 в 11:32)
 

Для разбиения строки есть функция $ex=EXPLODE(1,2)
Где 1 — разделитель( например пробел или какой другой символ), а 2 — это сктрока которую нужно разбить.
в итоге в переменной $ex лежит массив разбитой строки, использовать так:

$ex[0] — первый разбитый участок
$ex[1] — второй и т.д.

   
 
 автор: mihdan   (17.07.2008 в 11:37)   письмо автору
 
   для: Justin Marty   (17.07.2008 в 11:32)
 

Я так понял explode по табуляции делается, а не по пробелу!

   
 
 автор: Antohins   (17.07.2008 в 11:33)   письмо автору
 
   для: Justin Marty   (17.07.2008 в 10:05)
 

Никакой csv парсер не нужен.
Читай файл построчно, используй explode.
Примерно так:

<?php 
// Построчное чтение файла 
$handle fopen ("/tmp/inputfile.txt""r"); 
while (!
feof ($handle)) { 
    
$str fgets($handle4096);  // строка 3653754368    3653754623    217.199.222.0 - 217.199.222.255    RU    Москва    Москва    Центральный    ASSIGNED PA
    
$ex explode("    ",$str);
    
$first=$ex[0]; // 3653754368
    
$second=$ex[1]; // 3653754623
    
$third=$ex[2]; //  217.199.222.0 - 217.199.222.255
    
$four=$ex[3]; // RU
    
$five=$ex[4]; // Москва
    
$six=$ex[5]; // Москва
    
$seven=$ex[6]; // Центральный
    
$eight=$ex[7]; // ASSIGNED PA
    
$query="INSERT INTO table('one','two','three','four','five','six','seven','eight') VALUES('".$first."','".$second."','".$third."','".$four."','".$five."','".$six."','".$seven."','".$eight."')";
    if(
mysql_query($query)){echo "Успешно добавлено!<br>";}else{"Ошибка — ".mysql_error();}
}
fclose ($handle); 
?>

   
 
 автор: mihdan   (17.07.2008 в 11:38)   письмо автору
 
   для: Antohins   (17.07.2008 в 11:33)
 

Лучше сначала сформировать SQL а потом его выполнить, но не гонять енто в цикле, а в основном тоже самое, что и Dirol написал

   
 
 автор: Justin Marty   (17.07.2008 в 11:49)   письмо автору
 
   для: Antohins   (17.07.2008 в 11:33)
 

Уважаемый, Antohins, а то что в шестом поле может быть значение например "Свердловская область" или 'Республика Башкиртостан"....ну вообщем слова такие как "область" "республика" "край" это не повлияет на правильность создаваемой таблицы? (ведь такие слова тоже разделены пробелом)

   
 
 автор: mihdan   (17.07.2008 в 12:09)   письмо автору
 
   для: Justin Marty   (17.07.2008 в 11:49)
 

Я так понял explode по табуляции делается, а не по пробелу!

   
 
 автор: Justin Marty   (17.07.2008 в 12:19)   письмо автору
 
   для: mihdan   (17.07.2008 в 12:09)
 

ну если так, то я думаю проблем не должно быть.......наверно))

   
 
 автор: Antohins   (17.07.2008 в 13:38)   письмо автору
 
   для: mihdan   (17.07.2008 в 12:09)
 

Кстати вы правы.

Код табуляции — &#09;

Скорее всего придется по этому символу делить строку.

   
 
 автор: Antohins   (17.07.2008 в 13:36)   письмо автору
 
   для: Justin Marty   (17.07.2008 в 11:49)
 

Если вас устроит то, что в таблице будет выражение типа «Свердловская область» и «Республика Башкиртостан», то конечно проблем не будет. Главное — сделайте поле типа varchar (либо text)

   
 
 автор: Justin Marty   (17.07.2008 в 14:35)   письмо автору
 
   для: Antohins   (17.07.2008 в 13:36)
 

Вроде все здорово...но не задача заполнил так:

   one                two     three      four        five     six     seven     eight     id 
     1040547840    0                                  1
     1040547856    0                                  2
       1040547872    0                                  3


При кодинге:
<?php  
INCLUDE("/home/xxxxxx/public_html/xxxxx/xxxxxx/connect.php");
// Построчное чтение файла  
$handle fopen ("/home/xxxxx/public_html/xxxxxx/index/IP.txt""r");
if(!
$handle){echo 'No';}
while (!
feof ($handle)) {  
    
$str fgets($handle4096);  // строка 3653754368    3653754623    217.199.222.0 - 217.199.222.255    RU    Москва    Москва    Центральный    ASSIGNED PA 
    
$ex explode("&#09",$str); 
    
$first=$ex[0]; // 3653754368 
    
$second=$ex[1]; // 3653754623 
    
$third=$ex[2]; //  217.199.222.0 - 217.199.222.255 
    
$four=$ex[3]; // RU 
    
$five=$ex[4]; // Москва 
    
$six=$ex[5]; // Москва 
    
$seven=$ex[6]; // Центральный 
    
$eight=$ex[7]; // ASSIGNED PA 
    
$query="INSERT INTO ip VALUES('".$first."','".$second."','".$third."','".$four."','".$five."','".$six."','".$seven."','".$eight."','')"
    if(
mysql_query($query)){echo "Успешно добавлено!<br>";}else{"Ошибка — ".mysql_error();} 

fclose ($handle);  
?>

в чем дело?....плиз))

   
 
 автор: Justin Marty   (17.07.2008 в 14:49)   письмо автору
4.7 Кб
 
   для: Justin Marty   (17.07.2008 в 14:35)
 

Вот я прикрепил исходный файл(правда фрагмент) с которым работаю. Если необходима могу залить полностью, но он довольно много весит.

   
 
 автор: Justin Marty   (17.07.2008 в 14:57)   письмо автору
472.8 Кб
 
   для: Justin Marty   (17.07.2008 в 14:49)
 

И вот что получил (таблица) Тоже прикреплина.


PS подскажите, пожалуйста где не точность?

   
 
 автор: Trianon   (17.07.2008 в 15:37)   письмо автору
 
   для: Justin Marty   (17.07.2008 в 14:49)
 

Я вот импортировал Ваш фрагмент в таблицу с помощью phpMyAdmin безо всякого скрипта.
Предварительно убрав первую пустую строку, которую Вы в этот фрагмент зачем-то засунули. Видимо, чтобы скучно никому не было.

Впрочем, если Вам нужно именно скриптом, строку $ex = explode("&#09",$str); исправьте следующим образом.
$ex = explode("\t", $str);

   
 
 автор: Justin marty   (18.07.2008 в 11:55)   письмо автору
 
   для: Trianon   (17.07.2008 в 15:37)
 

Без скрипта? В принципе мне не принципиально через что производить импорт... Скажите пожалуйста, какие параметры вы выставляли при импорте?

   
 
 автор: Trianon   (18.07.2008 в 13:54)   письмо автору
 
   для: Justin marty   (18.07.2008 в 11:55)
 

Те параметры что трогал:

кодировка: cp1251
тип: CSV
разделитель полей \t
список имен полей: one,two,three и т.д.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования