Импорт на тхт в БД ?

17 отговора 562 прегледа
#1

Импорт на тхт в БД ?

Здравейте
Проблема е следния - имам текстов файл от който искам да импортна определени низове в различни полета в базата. Имам примерно ред който започва с "e-mail=" и стойността след равното да се записва примерно в полето "mail" в БД. Искам да попитам дали някой знае някакъв по-практичен начин за търсене на съответни низове и вкарването на информацията след тях, отколкото ръчното вкарване на информацията(става дума за доста информация). Много благодаря предварително и се надявам, че сте разбрали въпроса ми!

Just do it
Отговор
в отговор на Nebesen1 #2

да започнем ...

... какво си направил до тук по въпроса?

-----------------
живей днес, защото вчера няма да се върне, а утре може и да не дойде!
Отговор
в отговор на Nebesen1 #3

Чесно, тоя начин "ръчно" не е начин :)

Чесно, тоя начин "ръчно" не е начин :)
И на въпроса "дали някой знае" ти отговарям най-изчерпанетлно:
Да, някой знае. Дори са повече от един.

Направи си съответствие между ключовите думи в текстовия файл и имената на полетата в таблицата.
Обходи си файла и си попълни полетата.
Е, може всеки път да извеждаш и списък с неоткритите ключови думи.

ПП
И да знаеш, в програмирането винаги има и по-добри идеи

Отговор
в отговор на Bълk #4

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
Отговор
в отговор на Nebesen1 #5

Re: Импорт на тхт в БД ?

Според мен, за да може някой да ти помогне покажи част от текстовият файл който искаш да вкараш в ДБ-то. Така като не знаем в какъв формат ти е файла няма как да ти момогнем, а и няма смисъл да гадаем

Отговор
в отговор на Nebesen1 #6

Re: да започнем ...

Има ли изобщо смисъл това което съм написал ?
Така и не разбрах как се копира низа от дадена позиция до края на реда ??? Търсих в пхп.нет, но нищо не открих. Помагайте !

Just do it
Отговор
в отговор на Nebesen1 #7

Re: да започнем ...

Ако искаш до края на реда, пробвай така

if ($str=strstr($get, 'E-mail='))

така $str ще съдържа всичко след 'E-mail=' до края на реда

Отговор
в отговор на Borko #8

Re: да започнем ...

Borko благодаря, пак е някакъв напредък, но се появяват следните 2 проблема:

1) $стр=хваща последния намерен низ, който съдържа "Е-маил=", а на мен ми трябват всички. Идея ?

2) $стр=присвоява низ, който започва с фразата "Е-маил=", това по-някакъв начин дали може да се отреже или филтрира?

Едит: 2) Фикснато :) , остана само да хвана ВСИЧКИ стойности, не само последната. Помагайте.
Just do it<P ID=&quot;edit&quot;><FONT class=&quot;small&quot;><EM>Редактирано от Nebesen1 на 21.12.05 11:17.</EM></FONT></P>

Редактирано от Nebesen1 на

Отговор
в отговор на Nebesen1 #9

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
Отговор
в отговор на Nebesen1 #10

Пробвай да използваш..

Regular expressions...

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.
Отговор
в отговор на Nebesen1 #11

Re: да започнем ...

$content = file_get_contents('file.txt');
$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);

Отговор
в отговор на бaтeнцe #12

Re: да започнем ...

Аз бих започнал с
$buffer = file('alabala.txt');

$buffer представлява масив, на който всеки елемент въдържа по един ред от файла. обработваш го с цикъла
foreach ($buffer as $line) {
$line = chop($line);
обработка
}

Отговор
в отговор на бaтeнцe #13

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
Отговор
в отговор на Nebesen1 #14

Re: да започнем ...

Твоята задачa може да се напише пo много начини. Всеки от тези които ти помагат го пише по различен начин. Затова настава объркване в твоя мозък.

Пусни тук един ред от твоя файл, за да могат хората да ти помогнат както трябва. Досега не се разбра на един ред има ли повече от едно 'E-mail='

Редактирано от Borko на

Отговор
в отговор на Nebesen1 #15

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);

съм го сложил за да видиш резултата...инсъртването би трябвало и сам да можеш да си го направиш

както ти написаха може да се направи и с регулар експрешънс ама като те гледам къде си съвсем ще се омоташ

Отговор
в отговор на Nebesen1 #16

Re: Импорт на тхт в БД ?

И аз съм начинаещ, но поне правя някакви усилия сам да се справям
Ти искаш хората да ти напишат целия скрипт...

Отговор
в отговор на ДpyrHaчинaeщ #17

Re: Импорт на тхт в БД ?

Не си прав. Поизмъчих се доста часове и стигнах до някакъв резултат(хващаше само последния низ), просто ми трябваше малко тласък.

Just do it
Отговор
в отговор на б #18

Re: да започнем ...

БАТЕНЦЕ златен си човек !
NikB, Цитоплазма, Котарак ... благодаря, че отделихте време за моя проблем.

ПС: Батенце substr я прочетох за какво е веднага след като писа първия пост, просто не знаех какъв е смисълца на тези 2 реда.

Just do it
Отговор