Импорт на тхт в БД ?
Импорт на тхт в БД ?
Проблема е следния - имам текстов файл от който искам да импортна определени низове в различни полета в базата. Имам примерно ред който започва с "e-mail=" и стойността след равното да се записва примерно в полето "mail" в БД. Искам да попитам дали някой знае някакъв по-практичен начин за търсене на съответни низове и вкарването на информацията след тях, отколкото ръчното вкарване на информацията(става дума за доста информация). Много благодаря предварително и се надявам, че сте разбрали въпроса ми!
Just do it
да започнем ...
-----------------
живей днес, защото вчера няма да се върне, а утре може и да не дойде!
Чесно, тоя начин "ръчно" не е начин :)
И на въпроса "дали някой знае" ти отговарям най-изчерпанетлно:
Да, някой знае. Дори са повече от един.
Направи си съответствие между ключовите думи в текстовия файл и имената на полетата в таблицата.
Обходи си файла и си попълни полетата.
Е, може всеки път да извеждаш и списък с неоткритите ключови думи.
ПП
И да знаеш, в програмирането винаги има и по-добри идеи
Re: да започнем ...
отварям файла, прочитам съдържанието, търся даден низ, гледам на коя позиция е показателя, премествам с 1(на мен ми трябва стойността след "E-mail=" примерно), копирам низа от получената позиция до края на реда, запазвам го в променлива, инсърт в базата. Доста зле съм с работата с файловете и низове и съм написал съвсем малка част :
В отговор на:
<?php
@$fp=fopen("test.txt", "r");
if (!$fp)
{
echo 'Error reading';
exit;
}
while (!feof($fp))
{
$get=fgets($fp);
}
if (strstr($get, 'E-mail='))
{
$show=ftell($fp);
$show_next=$show+1;
substr($get, $show_next);
}
?>
Надявам се да дадете насока
Just do it
Re: Импорт на тхт в БД ?
Re: да започнем ...
Така и не разбрах как се копира низа от дадена позиция до края на реда ??? Търсих в пхп.нет, но нищо не открих. Помагайте !
Just do it
Re: да започнем ...
if ($str=strstr($get, 'E-mail='))
така $str ще съдържа всичко след 'E-mail=' до края на реда
Re: да започнем ...
1) $стр=хваща последния намерен низ, който съдържа "Е-маил=", а на мен ми трябват всички. Идея ?
2) $стр=присвоява низ, който започва с фразата "Е-маил=", това по-някакъв начин дали може да се отреже или филтрира?
Едит: 2) Фикснато :) , остана само да хвана ВСИЧКИ стойности, не само последната. Помагайте.
Just do it<P ID="edit"><FONT class="small"><EM>Редактирано от Nebesen1 на 21.12.05 11:17.</EM></FONT></P>
Редактирано от Nebesen1 на
Re: да започнем ...
В отговор на:
<?php
$db_name="db";
$db_host="localhost";
$db_user="user";
$db_password="pass";
$connection=@mysql_connect($db_host, $db_user, $db_password);
@mysql_select_db($db_name) or die("cannot connect to mysql database");
@$fp=fopen("test.txt", "r");
if (!$fp)
{
echo 'Error reading';
exit;
}
while (!feof($fp))
{
$get=fgets($fp);
}
if ($str=strstr($get, 'E-mail='))
{
$email_array=explode('E-mail=', $str);
echo $email_array[1];
$query="INSERT INTO table (mail) VALUES ('$email_array[1]')";
mysql_query($query) or die(mysql_error());
}
fclose($fp);
?>
Ако някой има идея, да казва
Just do it
Пробвай да използваш..
preg_match_all("/(?<=E\-mail\=).*$/", $get, $matches);
$matches[$i][0] би трябвало да ти върне emailа от ред $i...
There are three determined states the cat could be in: Alive, Dead, and Bloody Furious.
Re: да започнем ...
$lines = explode("\n", $content);
$emails = array();
foreach ($lines as $line)
if (substr($line, 0, strlen('E-mail=')) == 'E-mail=')
$emails[] = substr($line, strlen('E-mail='));
echo '<pre>';
var_dump($mails);
Re: да започнем ...
$buffer = file('alabala.txt');
$buffer представлява масив, на който всеки елемент въдържа по един ред от файла. обработваш го с цикъла
foreach ($buffer as $line) {
$line = chop($line);
обработка
}
Re: да започнем ...
Първо благодаря на всички за отделеното време, но всеки пише някакво парче код и не ми става много ясно кое за какво и за къде е. Не искам да звучи нахално, но може ли някой да ми обясни след като разбия съдържанието на линии не следва ли вече да потърся дадения низ във всяка от тях? примерно така :
$content=file_get_contents('test.txt');
$lines=explode("\n", $content);
if ($str=strstr($lines, 'E-mail='))
А тези 2 реда :
if (substr($line, 0, strlen('E-mail=')) == 'E-mail=')
$emails[] = substr($line, strlen('E-mail='));
... значи доколкото разбирам това връща подниз като брои знаците на "E-mail=", обаче какво означава това =='E-mail=' в самата функция не ми е ясно. Тези 2 реда може ли някой да го обясни, че ми е пълна мъгла
Освен това какво означава <pre>, не съм чувал за такова ехо преди
Just do it
Re: да започнем ...
Пусни тук един ред от твоя файл, за да могат хората да ти помогнат както трябва. Досега не се разбра на един ред има ли повече от едно 'E-mail='
Редактирано от Borko на
Re: да започнем ...
substr
(PHP 3, PHP 4, PHP 5)
substr -- Return part of a string
Description
string substr ( string string, int start [, int length] )
substr() returns the portion of string specified by the start and length parameters.
if (substr($line, 0, strlen('E-mail=')) == 'E-mail=')
$emails[] = substr($line, strlen('E-mail='));
преведено накратко :
ако $line започва с 'E-mail=', добави в масива $emails останалата част на реда.
и няма такова нещо като ехо '<pre>'
echo '<pre>';
print_r($emails);
съм го сложил за да видиш резултата...инсъртването би трябвало и сам да можеш да си го направиш
както ти написаха може да се направи и с регулар експрешънс ама като те гледам къде си съвсем ще се омоташ
Re: Импорт на тхт в БД ?
Ти искаш хората да ти напишат целия скрипт...
Re: Импорт на тхт в БД ?
Just do it
Re: да започнем ...
NikB, Цитоплазма, Котарак ... благодаря, че отделихте време за моя проблем.
ПС: Батенце substr я прочетох за какво е веднага след като писа първия пост, просто не знаех какъв е смисълца на тези 2 реда.
Just do it