[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: выбрать из txt файла строки с определенным значени
Страницы: 1, 2, 3, 4, 5, 6
F_Yuriy
Цитата (killer8080 @ 17.12.2012 - 11:28)
F_Yuriy
тебе нужно чтоб в массиве были только: "Рога, Копыта"?

Да! И потом чтобы они заносились в таблицу mysql.
Т.е. грубо говоря, есть файл, который я анализирую, выбираю значения Плательщиков и заношу их в таблицу
killer8080
$text = 'Дата=22.11.12 
ОКПО=09393938
Плательщик1=Рога
Счет=182828282
Плательщик1=Копыта'
;
$arr = explode("\r\n", $text);
$search = 'Плательщик1';
$arr = array_filter($arr, create_function('$s', 'global $search; return strpos($s, $search) === 0;'));
array_walk($arr, create_function('&$v', 'global $search; list(,$v) = explode($search."=", $v);'));
echo '<pre>'.print_r($arr, 1).'</pre>';

Получаешь массив значений, потом перебираешь циклом, формируя запрос к бд.
F_Yuriy
Цитата (killer8080 @ 17.12.2012 - 11:44)
$text = 'Дата=22.11.12 
ОКПО=09393938
Плательщик1=Рога
Счет=182828282
Плательщик1=Копыта'
;
$arr = explode("\r\n", $text);
$search = 'Плательщик1';
$arr = array_filter($arr, create_function('$s', 'global $search; return strpos($s, $search) === 0;'));
array_walk($arr, create_function('&$v', 'global $search; list(,$v) = explode($search."=", $v);'));
echo '<pre>'.print_r($arr, 1).'</pre>';

Получаешь массив значений, потом перебираешь циклом, формируя запрос к бд.

Ничего не отображает
killer8080
Цитата (F_Yuriy @ 17.12.2012 - 09:48)
Ничего не отображает

быть такого не может, хотя бы пустой массив должен показать.
F_Yuriy
Я понял так:
$text = file('test.txt');
$arr = explode("=", $text);
$search = 'Плательщик1';
$arr = array_filter($arr, create_function('$s', 'global $search; return strpos($s, $search) === 0;'));
array_walk($arr, create_function('&$v', 'global $search; list(,$v) = explode($search."=", $v);'));
echo '<pre>'.print_r($arr, 1).'</pre>';
F_Yuriy
Цитата (killer8080 @ 17.12.2012 - 11:51)
Цитата (F_Yuriy @ 17.12.2012 - 09:48)
Ничего не отображает

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

Извиняюсь, пустой массив показывает
Игорь_Vasinsky
$file = file('file.txt');

foreach($file as $value)
if(substr_count($value, 'Плательщик1')>0){
$data = explode("=", $value);
mysqli_query($link, "INSERT INTO `table` (`cell`) VALUES ('".mysqli_real_escape_string($link, $data[1])."')");
}


если файл в юникоде - то mb_substr_count - будет логичней

я думаю не разумно юзать регулярку для поиска и сравнения начала строки

вообще в mysqli есть mysqli_multi_query - с ней будет вернее. т.е. сначала в цикле готовишь SQL запрос - потом засылаешь одним запросом

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080
Цитата (Игорь_Vasinsky @ 17.12.2012 - 09:56)
вообще в mysqli есть mysqli_multi_query - с ней будет вернее.

вернее будет одним запросом
INSERT INTO `table` (`cell`) VALUES ('value1'), ('value2'), ('value3') ...
killer8080
Цитата (F_Yuriy @ 17.12.2012 - 09:54)
Я понял так:$text = file('test.txt');$arr = explode("=", $text); $search = 'Плательщик1'; $arr = array_filter($arr, create_function('$s', 'global $search; return strpos($s, $search) === 0;')); array_walk($arr, create_function('&$v', 'global $search; list(,$v) = explode($search."=", $v);')); echo '<pre>'.print_r($arr, 1).'</pre>';

закомменти строчку с arraay_walk, что выводит?
Игорь_Vasinsky
Цитата
вернее будет одним запросом

странно, не пробовал даже такой вариант))

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
F_Yuriy
Цитата (killer8080 @ 17.12.2012 - 12:03)
Цитата (Игорь_Vasinsky @ 17.12.2012 - 09:56)
вообще в mysqli есть mysqli_multi_query - с ней будет вернее.

вернее будет одним запросом
INSERT INTO `table` (`cell`) VALUES ('value1'), ('value2'), ('value3') ...

Я извиняюсь, что туплю. Но Вы не могли бы конкретно запрос написать, а то если честно, я запутался.
Игорь_Vasinsky
он написан уже. подставь свои значения

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
F_Yuriy
$dbc = mysqli_connection('localhost', 'root', '', 'mytest');

$file = file('file.txt');
foreach($file as $value)
if(substr_count($value, 'Плательщик1')>0){
$data = explode("=", $value);
$query = "INSERT INTO client (plat) VALUES ($data)";
mysqli_query($db, $query)
or die('Ошибка');
echo 'Запрос выполнен';
mysqli_close($dbc);


Я так понял?
Игорь_Vasinsky
1. ты уверен что подключился к БД? глянь мануал
2. $data - это массив, ты запишешь array
3. Тебе показали 2 варианта записи данных 1м запросом



_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080
F_Yuriy
ты сначала с массивом разберись
Цитата (F_Yuriy @ 17.12.2012 - 10:20)
$dbc = mysqli_connection('localhost', 'root', '', 'mytest');

нет такой функции, есть mysqli_connect
Цитата (F_Yuriy @ 17.12.2012 - 10:20)
$query = "INSERT INTO client (plat) VALUES ($data)";

неправильно
Быстрый ответ:

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