Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Перенос данных из текстового файла в базу данных
 
 автор: Nelinea   (23.02.2010 в 12:44)   письмо автору
 
 

Имеем некий файл slovar.txt
данные из этого файла надо занести в таблицу базы данных, предварительно обработав регулярным выражением $shablon="[a-d]{1-6}"
подскажите как это сделать?

  Ответить  
 
 автор: neadekvat   (23.02.2010 в 12:49)   письмо автору
 
   для: Nelinea   (23.02.2010 в 12:44)
 

А что вы уже смогли сделать? :)

  Ответить  
 
 автор: Trianon   (23.02.2010 в 12:52)   письмо автору
 
   для: Nelinea   (23.02.2010 в 12:44)
 

Структуру файла и таблицы неплохо было бы привести.

для начала разделить задачу на три (если не четыре) подзадачи.
?) создание таблицы
а) чтение файла.
б) сопоставление с шаблоном.
в) пополнение таблицы.

Представляя, как решать отдельные, можно думать о том, как решать всю.

  Ответить  
 
 автор: Nelinea   (23.02.2010 в 13:27)   письмо автору
 
   для: Trianon   (23.02.2010 в 12:52)
 

Успела сделать вот что:
<?php
// устанавлеваем соединение с БД
@include (config_db_inc. php);
//если таблица не существует создаем её
CREATE TABLE IF NOT EXISTS words_test (
words_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
words_name VARCHAR(6) NOT NULL);
//считывае данные для словаря из файла с проверкой существования файла

$file_array=file("slovar".txt");

function myfile($name)
{
if (file_exists($name))
function otbor_shablon ($shablon,$file_array )
{
//создаем шаблон с необходимой последовательностью
$shablon="[a-d]{1-6}";
preg_match ($shablon, $file_array )
---------------------------------------------------------------------------------------------------------------
вот здесь я и остановилась :-(
-----------------------------------------------------------------------------------------------------------------
}
else echo "Файл не существует";
}
fclose ($name);

  Ответить  
 
 автор: Лена   (23.02.2010 в 13:34)   письмо автору
 
   для: Nelinea   (23.02.2010 в 13:27)
 

@include (config_db_inc. php); - заглушка зачем?
Вам нужно почитать функции PHP для работы с базой данных.
Второй аргумент в preg_match - должна быть строка, у Вас это массив.
Вам нужно почитать, чем отличаются preg_match и preg_match_all. И подумать, что Вам больше надо.
words_name VARCHAR(6) NOT NULL - про длину поля типа VARCHAR тоже надо почитать.
$file_array=file("slovar".txt"); - в этой строке синтаксическая ошибка.
И в этой строке preg_match ($shablon, $file_array ) у Вас тоже синтаксическая ошибка.
Когда все исправите, будет работать :)
И еще. Я бы функцию внутри другой функции не определяла. И где у Вас вызов функции myfile()?

  Ответить  
 
 автор: Nelinea   (23.02.2010 в 13:53)   письмо автору
 
   для: Лена   (23.02.2010 в 13:34)
 

с ошибками понятно,

нужно каждую стоку считанную в массив из файла обработать шаблоном и посторочно занести в базу то что останется (совпало с шаблоном) ;-( именно поэтому не получается

  Ответить  
 
 автор: Лена   (23.02.2010 в 14:06)   письмо автору
 
   для: Nelinea   (23.02.2010 в 13:53)
 

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

  Ответить  
 
 автор: Nelinea   (23.02.2010 в 14:34)   письмо автору
 
   для: Лена   (23.02.2010 в 14:06)
 

сделала так:
<?php
// устанавливаем соединение с БД
include (config_db_inc. php);
//если таблица не существует создаем её
CREATE TABLE IF NOT EXISTS words_test (
words_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
words_name CHAR(6) NOT NULL);
//считываем данные для словаря из файла с проверкой существования файла
$file_array=file("slovar.txt");
if (file_exists($file_array))
{
//создаем шаблон с необходимой последовательностью
$shablon="[a-d]{1-6}";
$resultat=preg_match_all ($shablon, $file_array, PREG_PATTERN_ORDER )

  Ответить  
 
 автор: Тень&   (23.02.2010 в 14:41)   письмо автору
 
   для: Nelinea   (23.02.2010 в 14:34)
 

1. Заносите весь код в [code ] ... [/ code] (на форуме, ессно....)
2. Поставьте в начало
<?php
ini_set
('display_errors',1);
error_reporting(E_ALL);

3. Убедитесь, что нет синтаксических ошибок (сейчас они есть). Одновременно с этим, выкиньте нафиг запрос на создание таблицы. В скрипте его быть не должно. Создавайте таблицу через phpMyAdmin.
4. Перед использованием каждой функции смотрите определение функции (какие аргументы она принимает).

  Ответить  
 
 автор: Nelinea   (23.02.2010 в 17:07)   письмо автору
 
   для: Тень&   (23.02.2010 в 14:41)
 

Извините, таблица нужна так как словарь будет пополняться :-(
phpMyAdmin на любителя, да маленькая да легкая не спорю, но предпочту другие вещи.
можно не ставить указатель ошибок в начале скрипта а нормально отписать php.ini вручную :-)
на счет ошибок спасибо - проверяю и ковыряюсь - большую часть нашла.

  Ответить  
 
 автор: Trianon   (23.02.2010 в 17:17)   письмо автору
 
   для: Nelinea   (23.02.2010 в 17:07)
 

gприпополнении словаря таблицу не придется создавать еще раз.
Вы можете, конечно, создавать таблицу и из скрипта, но тогда SQL-запрос CREATE TABLE придется оформить как отдельный по всем правилам.
<?

mysql_query
("
  CREATE TABLE IF NOT EXISTS words_test (
    words_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    words_name CHAR(6) NOT NULL); 
"
);

  Ответить  
 
 автор: Nelinea   (23.02.2010 в 18:22)   письмо автору
 
   для: Trianon   (23.02.2010 в 17:17)
 

спасибо, с этой частью разобралась уже...
осталось отсортированный массив занести в базу данных ....

  Ответить  
 
 автор: Trianon   (23.02.2010 в 19:21)   письмо автору
 
   для: Nelinea   (23.02.2010 в 18:22)
 

$resultat сейчас как выглядит?
print_r($resultat);

  Ответить  
 
 автор: Тень&   (23.02.2010 в 19:35)   письмо автору
 
   для: Trianon   (23.02.2010 в 19:21)
 

Как какое-то число

  Ответить  
 
 автор: Trianon   (23.02.2010 в 20:03)   письмо автору
 
   для: Тень&   (23.02.2010 в 19:35)
 

Спасибо, Капитан Очевидность.
А $file_array ?

  Ответить  
 
 автор: Тень&   (23.02.2010 в 20:19)   письмо автору
 
   для: Trianon   (23.02.2010 в 20:03)
 

Массив строк из "slovar.txt".

Пока не разобрались с этим куском кода, до занесения в БД ещё далеко.

  Ответить  
 
 автор: Nelinea   (25.02.2010 в 13:53)   письмо автору
 
   для: Тень&   (23.02.2010 в 20:19)
 

так посмотрев еще раз на ситуацию, решила считать несчастный файл по-другому

<?php
$file
=fopen("slovar.txt","r");
while(!
feof($file))
{
$slovar_info=fscanf($file,"[a-d]{6}");
 {
list (
$id$value) = $slovar_info;
print_r($slovar_info);
print(
"<br/>");
}
fclose($file);
?>



syntax error, unexpected $end in line 14

файл slovar.txt выглядит внутри примерно так:
aaaaaa
edcrtd
aaaaab
aaaaac
klmder
aaaaad
aaaaae
aaaaaf
gfpoyttee
aaaaba
aaaabb
aaaabc
aaaabd

  Ответить  
 
 автор: Trianon   (25.02.2010 в 14:30)   письмо автору
 
   для: Nelinea   (25.02.2010 в 13:53)
 

Может тогда всё же

<?php
$file
=fopen("slovar.txt","r");
while(!
feof($file))
{
  
$s trim(fgets(file)); 
  if(
preg_match("/^[a-d]{6}$/"$s))
    print(
"<br/> $s");
}
fclose($file);
?> 

  Ответить  
 
 автор: Nelinea   (27.02.2010 в 06:31)   письмо автору
 
   для: Trianon   (25.02.2010 в 14:30)
 

получилось теперь построчно все это счастье надо в базу данных записать :-(
[

  Ответить  
 
 автор: Nelinea   (28.02.2010 в 11:55)   письмо автору
 
   для: Nelinea   (27.02.2010 в 06:31)
 


include ("config_db_inc.php");
foreach ($s as $key => $value)
{ $query="INSERT INTO 'words_test'  VALUES ($value)" ;
}

  Ответить  
 
 автор: Trianon   (28.02.2010 в 14:27)   письмо автору
 
   для: Nelinea   (28.02.2010 в 11:55)
 

<?
include ("config_db_inc.php");
foreach (
$s as $key => $value)

  
$elem  "'".mysql_real_escape_string($value)."'";
  
$query="INSERT INTO `words_test` (`word_name`) VALUES ($elem)" ;
  
mysql_query(  $query  ) or die("Error in $query : ".mysql_error());



внимание на обратные косые кавычки вокруг имен и на список полей.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования