Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Перенос данных в таблицу бд

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: парсер?
Virgin
Отправлено: 25 Августа, 2008 - 12:47:22
Post Id


Частый гость


Покинул форум
Сообщений всего: 130
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




Всем привет!
Подскажите, есть ли такая возможность передать имеющиеся данные, которые представлены в виде:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. START FILE
  3.  
  4. 1*first*2*second*3*third*0* .....
  5.  
  6. END FILE
  7.  

и доступные через инет по определенному адресу и порту(т.е я могу обратившись увидеть их в браузере), в таблицу базы данных на определенном хостинге???

Если кто знает подскажите КАК плизз!!!

(Отредактировано автором: 25 Августа, 2008 - 12:48:38)

 
 Top
pifon1989
Отправлено: 25 Августа, 2008 - 13:28:56
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




Ну, во-первых, вид странноват. Улыбка
Но передать в удалённую базу можно.
Для этого нужно правильно приконнектиться, а, как следствие, знать следующие данные:
1. Адрес сервера, где лежит база
2. Имя юзера, имеющего права работать с данной базой
3. Пароль этого юзера
Кроме того, не помешало бы знать, одна там база или несколько. Потому что если несколько, нужно знатб название именно своей.
Проделывается на примере MySQL так:
$connect = mysql_connect("урл адрес базы", "имя юзера", "пароль юзер");

Вот и всё. Улыбка


-----
Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
 
 Top
Virgin
Отправлено: 25 Августа, 2008 - 14:17:28
Post Id


Частый гость


Покинул форум
Сообщений всего: 130
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




Допустим все это есть(пароли и тд)
Как должен примерно выглядеть скрипт чтоб такого вида файл передать в таблицу, т.е надо данные разделенные звездочками чтоб попадали в колонки таблицы...* - это типа разделителя данных
 
 Top
pifon1989
Отправлено: 25 Августа, 2008 - 14:28:48
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




Нужны пара уточнений.
Во-первых, приведите пожалуйста более длинный код файла.
Во вторых, нужно понять, какого рода таблица вам нужна. Сформируйте её, укажите названия колонок.
Если все данные одного типа, и вам всё равно, как размещать, можно сделать одну большую колонку - это проще и быстрее.
В-третьих, каков размер файла. Если размер эпический, сделать сплошными колонками уже нереал.


-----
Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
 
 Top
Virgin
Отправлено: 25 Августа, 2008 - 15:46:21
Post Id


Частый гость


Покинул форум
Сообщений всего: 130
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




1)
Ну например файл такого типа
CODE (text):
скопировать код в буфер обмена
  1.  
  2. START  FILE *Отказано*Самара*Саратов*10500**20*82**ООО "СОЛФИТ"*548* *ОТКЛОНЕНА*Волгоград*Саратов*11000**21*82**ИП Василькин Алексей Геннадьевич*26* *ОТКЛОНЕНА*Саратов*Нижний Новгород*10000**3*45**ООО "ПФ"Несси-ЛТД"*158* *-*Кисловодск*Саратов*25000**20*82**ООО "Оптимум"*733* *-*Саратов*Алатырь*15000**20*82**ООО "Промтехнологии"*1395* *ОТКЛОНЕНА*Волгоград*Саратов*14611**20*82**ОАО "Саратовстройстекло"*299* *ОТКЛОНЕНА*Калуга*Саратов*32000**20*82**ООО "СОЛФИТ"*548* *-*END FILE
  3.  


2) файл имеет грубо говоря расширение inc! в нем просто открывается dbf таблица и при обращении к апачу с адресом этого файла он выводит такое содержание....

3) таблица имеет такой вид:

CODE (text):
скопировать код в буфер обмена
  1.  
  2.         Поле ____ ___|Тип |_________Сравнение |         Атрибуты |      Ноль |  По умолчанию
  3.         ID_TRANS ____|int(11)__|________________|       Нет     |       auto_increment  
  4.         ID_PER _____|int(11)___|_______________ |       Да      |       NULL           
  5.         STATUS _____|char(20) |cp1251_general_ci |Да |  NULL           
  6.         PEREVOZCHIK| char(100)  cp1251_general_ci |Да   |NULL          
  7.         FROM________|   char(20) |cp1251_general_ci|Да |NULL           
  8.         TO__________|char(20)   |cp1251_general_ci |Да |NULL           
  9.         M___________|char(10)   |cp1251_general_ci |Да | NULL          
  10.         V___________|char(10)   |cp1251_general_ci |Да  |NULL          
  11.         STAVKA _____|char(30)   |cp1251_general_ci |Да |NULL           
  12.         TYPE_TS_____|char(20)   |cp1251_general_ci |Да  |NULL          
  13.  

(Отредактировано автором: 25 Августа, 2008 - 15:46:57)

 
 Top
pifon1989
Отправлено: 25 Августа, 2008 - 16:01:21
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




Мда. Тут добрый час работы. Такое только за 2$ Улыбка


-----
Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
 
 Top
Andrey5555
Отправлено: 25 Августа, 2008 - 19:11:00
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




Для каких целей это все? Возможно есть иной способ.
 
 Top
pifon1989
Отправлено: 25 Августа, 2008 - 19:36:31
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




Andrey5555 пишет:
Для каких целей это все? Возможно есть иной способ.

Это какой-такой? Через phpmyadmin вручную тыкать? Улыбка


-----
Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
 
 Top
Andrey5555
Отправлено: 25 Августа, 2008 - 20:02:04
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




Возможен и такой вариант))) Но если есть возможность эти данные вывести на страницу, а потом парсить, намного проще.
 
 Top
pifon1989
Отправлено: 25 Августа, 2008 - 20:07:18
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




Вывести то ты их выведешь, а потом? А если там три мега?
И их ещё надо будет в базу запихивать. Так что лучше не парсить вообще, а профильтровать через регулярные выражения или, того проще, превратить в массив из текстовой строки, explode тут идеален.
Затем построить цикл, который каждые сколько-то там элементов массива будет пихать в базу.

Но куда жутче, ежли там, в этом файле, данные не сплошняком, а, к примеру, иногда из пяти колонок одна пустая. Вот тогда вообще ппц - придётся считывать начальный и конечный столбец (или даже все по-очереди), причём, скорее всего, анализировать тип элемента массива, ну и регулярные выражения, если там строки повторяются.

Говорю: там геморроя может быть и не на час, а больше раза в три.

(Отредактировано автором: 25 Августа, 2008 - 20:08:45)



-----
Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
 
 Top
Virgin
Отправлено: 26 Августа, 2008 - 07:05:46
Post Id


Частый гость


Покинул форум
Сообщений всего: 130
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




да нет там как раз данных мало, всего может на пару килобайт....
вообщем я так понял все сложно очень...((

мне как раз нужно например с определенной периодичностью выгружать данные из одного сервака , который доступен через определенный порт на свой хост в бд...ну или хотябы передавать во временный текстовик на свой хост а оттуда вставлять в бд....данные раз в сутки обновляются
У меня работает вот такая вот конструкция

CODE (text):
скопировать код в буфер обмена
  1.  
  2. LOAD DATA INFILE 'you_file.txt'
  3. INTO TABLE you_tabl
  4. FIELDS TERMINATED BY '*';
  5.  


Осталось только этот файл научится автоматом получать, а потом выгружать в таблицу например раз в сутки, или может есть еще какие методы....

(Отредактировано автором: 26 Августа, 2008 - 07:28:47)

 
 Top
Andrey5555
Отправлено: 26 Августа, 2008 - 11:53:45
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




Ну автоматически только через CRON
 
 Top
pifon1989
Отправлено: 26 Августа, 2008 - 12:19:36
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




Ладно, ч0рт с вами. Улыбка
START FILE и END FILE, любые лишние комментарии нужно будет целиком удалить, должны чередоваться по десять полей и ничего больше, отследите это как можно внимательней, иначе база получит лишнюю информацию.
Тщательно проверьте, верно ли соответствие отрезка запроса, в особености фрагментов, которые я выделил квадратными скобками:
PHP:
скопировать код в буфер обмена
  1. `STATUS`, `FROM`, `TO`, `STAVKA`, [`M`], `ID_TRANS`, `ID_PER`, [`V`], `PEREVOZCHIK`, [`TYPE_TS`]

И куска файла
Virgin пишет:
*Отказано*Самара*Саратов*10500* [тут что-то] *20*82* [и тут что-то] *ООО "СОЛФИТ"*[548]*


PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $fh = fopen("адрес файла", "r") or die("Адрес файла указан неверно!");
  4. $fhr = file_get_contents($fh);
  5. $fht = ltrim($fhr);
  6. $easy_array = explode("*", $fht) or die("Не могу образовать массив!");
  7. $harder_array = array_chunk($easy_array, 10) or die("Не могу разбить массив!");
  8. echo "<br>Значение первой ячейки".$harder_array[0][0];
  9.  
  10. if ($harder_array[0][0] == "Отказано" || $harder_array[0][0] == "ОТКЛОНЕНА")
  11. {
  12. $connect = mysql_connect("имя хоста", "имя юзера", "пароль");
  13. for ($i = 0, !empty($harder_array[$i][0]), $i++)
  14. {
  15. $operation = mysql_query("INSERT INTO `имя_таблицы` (`STATUS`, `FROM`, `TO`, `STAVKA`, `M`, `ID_TRANS`, `ID_PER`, `V`, `PEREVOZCHIK`, `TYPE_TS`) VALUES ('".$harder_array[$i][0]."', '".$harder_array[$i][1]."', '".$harder_array[$i][2]."', '".$harder_array[$i][3]."', '".$harder_array[$i][4]."', '".$harder_array[$i][5]."', '".$harder_array[$i][6]."', '".$harder_array[$i][7]."', '".$harder_array[$i][8]."', '".$harder_array[$i][9]."')");
  16. echo "<br>Ячейка {$i} - V";
  17. }
  18. mysql_close($connect);
  19. }
  20. else
  21. echo "Некорректный формат файла. Ещё раз внимательно проверьте все поля!";
  22.  
  23. ?>
  24.  

(Отредактировано автором: 26 Августа, 2008 - 14:03:40)



-----
Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
 
 Top
Virgin
Отправлено: 26 Августа, 2008 - 16:47:19
Post Id


Частый гость


Покинул форум
Сообщений всего: 130
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




Parse error: syntax error, unexpected '/)', expecting ';' in ****php on line 16
Цитата:
for ($i = 0, !empty($harder_array[$i][0]), $i++)

(Отредактировано автором: 26 Августа, 2008 - 16:49:14)

 
 Top
pifon1989
Отправлено: 26 Августа, 2008 - 17:29:45
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




Тьфу, ё. Глаз замыливается. Улыбка
Проверьте сначала, верно ли соответствие полей БД с участком файла (указано выше), а то загрузите не то и не туда. Потом поля будете переименовывать. Оно вам надо? ;)
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP  
  3. $fh = fopen("адрес файла", "r") or die("Адрес файла указан неверно!");
  4. $fhr = file_get_contents($fh);
  5. $fht = ltrim($fhr);
  6. $easy_array = explode("*", $fht) or die("Не могу образовать массив!");
  7. $harder_array = array_chunk($easy_array, 10) or die("Не могу разбить массив!");
  8. echo "<br>Значение первой ячейки".$harder_array[0][0];
  9.  
  10. if ($harder_array[0][0] == "Отказано" || $harder_array[0][0] == "ОТКЛОНЕНА")
  11. {
  12. $connect = mysql_connect("имя хоста", "имя юзера", "пароль");
  13. for ($i = 0; !empty($harder_array[$i][0]); $i++)
  14. {
  15. $operation = mysql_query("INSERT INTO `имя_таблицы` (`STATUS`, `FROM`, `TO`, `STAVKA`, `M`, `ID_TRANS`, `ID_PER`, `V`, `PEREVOZCHIK`, `TYPE_TS`) VALUES ('".$harder_array[$i][0]."', '".$harder_array[$i][1]."', '".$harder_array[$i][2]."', '".$harder_array[$i][3]."', '".$harder_array[$i][4]."', '".$harder_array[$i][5]."', '".$harder_array[$i][6]."', '".$harder_array[$i][7]."', '".$harder_array[$i][8]."', '".$harder_array[$i][9]."')");
  16. echo "<br>Ячейка {$i} - V";
  17. }
  18. mysql_close($connect);
  19. }
  20. else
  21. echo "Некорректный формат файла. Ещё раз внимательно проверьте все поля!";
  22.  
  23. ?>
  24.  


-----
Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB