Пример текста в документе:
6356856825 tekst tekst tekst
6356856825 tekst tekst tekst
6356856825 tekst tekst tekst
6356856825 tekst tekst tekst
Нужно разделить 4 значения в строке и записать в разные колонки в базе.
И так с каждой строкой.
Спустя 6 минут, 45 секунд (13.08.2010 - 13:46) sergeiss написал(а):
См. описание функций file() для получения строк, explode() для разделения данных в каждой строке.
И далее читай про работу с БД, всякие там коннекты к БД, команды INSERT и всё тому подобное.
И далее читай про работу с БД, всякие там коннекты к БД, команды INSERT и всё тому подобное.
Спустя 3 минуты, 2 секунды (13.08.2010 - 13:49) Lenarfate написал(а):
1)открывает файл - fopen
2)в цикле читатете его построчно - fgets
3)пишете строки в 2мерный массив $array[0][<значение>], если в строке есть ' ' (пробел) то делаешь explode
4)если результат fgets==<разделитель>, создаете новый елемент массива $array[1]
5)и так до конца файла и получаем массив с парметрами
6)щаписываем полученный масив в базу
2)в цикле читатете его построчно - fgets
3)пишете строки в 2мерный массив $array[0][<значение>], если в строке есть ' ' (пробел) то делаешь explode
4)если результат fgets==<разделитель>, создаете новый елемент массива $array[1]
5)и так до конца файла и получаем массив с парметрами
6)щаписываем полученный масив в базу
Спустя 13 секунд (13.08.2010 - 13:49) Aspen написал(а):
Да согласен, все просто))). Но для "чайника" это ничего не говорит. С бд ещё можно разобраться... а вот остальное
Спустя 2 минуты, 21 секунда (13.08.2010 - 13:52) sergeiss написал(а):
Aspen - а ты почитай описалово для указанных мной функций.
Спустя 6 минут, 45 секунд (13.08.2010 - 13:59) Aspen написал(а):
Я понимаю значение этих функций. Хорошо буду думать.
Спустя 1 час, 6 минут, 28 секунд (13.08.2010 - 15:05) Aspen написал(а):
<?php
$host = 'localhost';
$user = 'root';
$pass = '';
$dbname = '';
$table = "my_name";
if(!mysql_connect($host,$user,$pass))
die('Не удалось подключиться к серверу MySql!');
elseif(!mysql_select_db($dbname))
die('Не удалось выбрать БД!');
$lines = file('spisok.txt');
foreach ($lines as $line_num => $line) {
$price = "$line";
$pieces = explode(" ", $price);
$query = "INSERT INTO $table VALUES('$pieces[0]','$pieces[1]', '$pieces[2]', '$pieces[3]')";
$result = MYSQL_QUERY($query);
}
PRINT "Данные занесены в таблицу";
?>
Вот что получилось. Скрипт вроде работает.
А допустим если строк будет очень много, можно как нибудь оптимизировать по быстродействию?
Спустя 5 минут, 38 секунд (13.08.2010 - 15:11) sergeiss написал(а):
Цитата (Aspen @ 13.08.2010 - 16:05) |
А допустим если строк будет очень много, можно как нибудь оптимизировать по быстродействию? |
Можно, если файл действительно большой, но в нем есть данные, которые не надо писать в БД:
Цитата (Lenarfate @ 13.08.2010 - 14:49) |
1)открывает файл - fopen 2)в цикле читатете его построчно - fgets 3)пишете строки в 2мерный массив $array[0][<значение>], если в строке есть ' ' (пробел) то делаешь explode 4)если результат fgets==<разделитель>, создаете новый елемент массива $array[1] 5)и так до конца файла и получаем массив с парметрами 6)щаписываем полученный масив в базу |
И второй вариант - если файл заведомо чётко структурирован и надо записать в БД все колонки из имеющихся в файле, то наиболее быстрой будет заливка через
LOAD DATA INFILE ...
Спустя 25 минут, 27 секунд (13.08.2010 - 15:36) Ice написал(а):
Цитата (sergeiss @ 13.08.2010 - 16:11) |
LOAD DATA INFILE |
я слыхал,что не все хостеры его врубают
Спустя 5 месяцев, 25 дней, 3 часа, 54 минуты, 9 секунд (10.02.2011 - 20:30) Aspen написал(а):
Ребят намекните пожалуйста как по этому же коду:
Сделать что бы выполнялось по очереди, скажем по 500 линий из файла.
Или намекните какие функции почитать.
<?php
$host = 'localhost';
$user = 'root';
$pass = '';
$dbname = '';
$table = "my_name";
if(!mysql_connect($host,$user,$pass))
die('Не удалось подключиться к серверу MySql!');
elseif(!mysql_select_db($dbname))
die('Не удалось выбрать БД!');
$lines = file('spisok.txt');
foreach ($lines as $line_num => $line) {
$price = "$line";
$pieces = explode(" ", $price);
$query = "INSERT INTO $table VALUES('$pieces[0]','$pieces[1]', '$pieces[2]', '$pieces[3]')";
$result = MYSQL_QUERY($query);
}
PRINT "Данные занесены в таблицу";
?>
Сделать что бы выполнялось по очереди, скажем по 500 линий из файла.
Или намекните какие функции почитать.