[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Разделитель в текстовом файле
Renden
Привет, ребят подскажите есть txt в нем как всегда куча строк, мне надо каждый елемент в строке записать в отдельную ячейку в базе, проблема в том что разделитель между словами в строке пробелы и их может быть 1 может быть 10 т.е фи-ей explode я немогу воспользоваться тк кол пробелов не известно, и trim не помогает, тк он удаляет же в начале строки. Как удалить лишние пробелы, и оставить только 1 в качестве разделителя?



Спустя 2 минуты, 58 секунд (14.10.2010 - 10:12) linker написал(а):
preg_split('/\s+/', $line);

Спустя 1 минута, 11 секунд (14.10.2010 - 10:13) Basili4 написал(а):
Попробуй так
$str="строка с пробелами"
preg_replace('# +#'," ",$str); // заменит любое количество пробелов больше 1 на 1

попробуй я не пробывал негде

Спустя 2 минуты, 30 секунд (14.10.2010 - 10:16) linker написал(а):
Basili4
Строку-то надо разбить, preg_split() и не надо париться.

Спустя 7 минут, 56 секунд (14.10.2010 - 10:24) Renden написал(а):
Basili4
linker
Спасибо, сейчас попробую

Спустя 5 минут, 53 секунды (14.10.2010 - 10:30) Renden написал(а):
linker
Да работает, только он загоняет в 1 огромный массив, а как разбить его на строки то?

Спустя 11 минут, 47 секунд (14.10.2010 - 10:41) linker написал(а):
Renden
А это зависит от того, как ты получаешь этот текст. Обычно, чтобы получить строки, нужно текст предварительно разбить на части, где разделителем выступает "\n".

Спустя 39 минут, 4 секунды (14.10.2010 - 11:21) Renden написал(а):
Плин, немогу понять как сделать ассоциативный массив
Допустим это файл txt

IP1 IP2 IP3 IP4 IP5
IP1 IP2 IP3 IP4 IP5
IP1 IP2 IP3 IP4 IP5


$str= file("local.txt");
foreach ($str as $x) {
$text = preg_split('/\s+/', $x);
foreach ($text as $a=>$v) {
echo $a, $v;
echo "<br>";
}
}


Как то через одно место этот код все-же присваивает ключ и значение каждой строке по отдельности т.е он выводит:

0IP1
1IP2
2IP3
3IP4
4IP5
5
0IP1
1IP2
2IP3
3IP4
4IP5
5
0IP1
1IP2
2IP3
3IP4
4IP5
5

Блин а как же сделать чтоб были не в 1 переменной $v а в разных типа $ip1, $ip2 и тп, чтоб записать это циклом нормально в базу, каждое значение в свой столбец?

Спустя 2 минуты, 29 секунд (14.10.2010 - 11:23) arvitaly написал(а):
Покажите базу, и пример файла и что куда должно записаться

Спустя 8 минут, 25 секунд (14.10.2010 - 11:31) Renden написал(а):
arvitaly
Ну пример файла текстового выше, ну а таблица в базе тоже я думаю ясна, запрос на добавление должен быть примерно такой

mysql_query("INSERT INTO test (ip1,ip2,ip3,ip4,ip5) VALUES ('$ip1','$ip2','$ip3','$ip4',$ip5')")


Спустя 5 минут, 57 секунд (14.10.2010 - 11:37) arvitaly написал(а):
<?php

$rows = file( "local.txt" ) ;
foreach ( $rows as $row )
{
mysql_query( "INSERT INTO test (ip1,ip2,ip3,ip4,ip5) VALUES ('" . implode( "','", preg_split( '~\s+~', $row ) ) . "')" ) or die() ;
}

Спустя 14 минут, 26 секунд (14.10.2010 - 11:52) Renden написал(а):
arvitaly
хм не работает..

Спустя 52 секунды (14.10.2010 - 11:53) arvitaly написал(а):
Цитата
arvitaly
хм не работает..


телепаты на луне, им не видно что именно не работает

Спустя 7 минут, 37 секунд (14.10.2010 - 12:00) Renden написал(а):
arvitaly
Про телепатов я знаю, просто ничего не выводит и ничего не добавляет в базу..
Я предполагаю может надо делать все по порядку,типа
Открыли файл и загнали в масив,
убили пробелы,
получили несколько значений из строки,
записали..
Просто у вас весь код в 1 строке фактически, и мне не понятно, и вывод не посмотреть..

Спустя 4 минуты, 18 секунд (14.10.2010 - 12:05) arvitaly написал(а):
<?php

$rows = file( "local.txt" ) ;
foreach ( $rows as $row )
{
$cols=implode( "','", preg_split( '~\s+~', $row ) );echo $cols;
mysql_query( "INSERT INTO test (ip1,ip2,ip3,ip4,ip5) VALUES ('" . $cols . "')" ) or die(mysql_error()) ;
}

А так?

Спустя 6 минут, 26 секунд (14.10.2010 - 12:11) Renden написал(а):
А так:
IP1','IP2','IP3','IP4','IP5','Column count doesn't match value count at row 1

Спустя 5 минут, 27 секунд (14.10.2010 - 12:16) arvitaly написал(а):
<?php

$rows = file( "local.txt" ) ;
foreach ( $rows as $row )
{

mysql_query( "INSERT INTO test (ip1,ip2,ip3,ip4,ip5) VALUES ('" . implode( "','", preg_split( '~\s+~', $row, 0, PREG_SPLIT_NO_EMPTY ) ) . "')" ) or die( mysql_error() ) ;
}


Спустя 4 минуты, 56 секунд (14.10.2010 - 12:21) Renden написал(а):
arvitaly
Работает, спасибо, правда не особо понятно как вы это сделали..
да и вопрос за одно, нельзя было сделать типа так?

$rows = file( "local.txt" ) ;
foreach ( $rows as $row )
{
$cols=implode( ",", preg_split( '~\s+~', $row ) );
$ip = explode(",", $cols);
echo $ip[0],$ip[1],$ip[2],$ip[3],$ip[4]; //ну тут заместо echo mysql insert..
echo "<br>";
}

И еще вопрос, можно ли пропустить допустим первые 4 строки в файле local.txt?

Спустя 3 минуты, 7 секунд (14.10.2010 - 12:25) arvitaly написал(а):
$rows = file( "local.txt" ) ;
foreach ( $rows as $row )
{
$ip=preg_split( '~\s+~', $row,PREG_SPLIT_NO_EMPTY ) ;

echo $ip[0],$ip[1],$ip[2],$ip[3],$ip[4]; //ну тут заместо echo mysql insert..
echo "<br>";
}


implode я сделал что сразу в запрос подставить ','
Быстрый ответ:

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