[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как вытащить текст из файла?
Aspen
Ребят подскажите пожалуйста как при помощи php из обычного текстового файла вытащить текст и записать в базу mysql.

Пример текста в документе:

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 и всё тому подобное.

Спустя 3 минуты, 2 секунды (13.08.2010 - 13:49) Lenarfate написал(а):
1)открывает файл - fopen
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 написал(а):
Ребят намекните пожалуйста как по этому же коду:


<?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 линий из файла.
Или намекните какие функции почитать.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.