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

Форум PHP

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

 

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

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

тема: Построчный ввод в переменную
 
 автор: TIGRUS   (23.07.2011 в 23:22)   письмо автору
 
 

Здравствуйте!
Я на этом форуме впервые. Мне нужна ваша помощь. В общем, ситуация такова:

Есть некий файл, в котором располагается, к примеру, 10 строчек с 1 словом в каждой.
Требуется функция, которая будет брать слово с этого файла и присваивать ему переменную (к примеру $slovo). Это слово будет применено в неком операторе скрипта. Этот оператор является частью тела цикла. При каждом повторении этого цикла переменной $slovo должно быть присвоено значение со второй, третий, четвертой и так далее строчки.

Помогите, пожалуйста, организовать такой процесс. Спасибо!

  Ответить  
 
 автор: 502   (23.07.2011 в 23:33)   письмо автору
 
   для: TIGRUS   (23.07.2011 в 23:22)
 

Построчное чтение файла

  Ответить  
 
 автор: TIGRUS   (23.07.2011 в 23:38)   письмо автору
 
   для: 502   (23.07.2011 в 23:33)
 

Спасибо за ссылку, но все ровно не могу разобраться, как седлать так, чтобы переменная с каждым повторением цикла менялась. Если можно хоть небольшой пример, буду очень благодарен :)

  Ответить  
 
 автор: Киналь   (23.07.2011 в 23:55)   письмо автору
 
   для: TIGRUS   (23.07.2011 в 23:22)
 

Перед циклом читате весь файл в массив функцией file(). После этого про сам файл можно забыть и работать с массивом. Соответственно, будет что-то типа

<?
$file_arr 
:= file('dta.txt');
$num_str := count($file_arr); // чтобы не было «магических чисел»
for($i:=0$i<=$num_str-1$i++)
{
...
 
$slovo := $file_arr[$i];
...
}
?>

  Ответить  
 
 автор: Valick   (24.07.2011 в 00:11)   письмо автору
 
   для: Киналь   (23.07.2011 в 23:55)
 

только в том случае если файл маленький по объему, а то хостер огорчит )

  Ответить  
 
 автор: cheops   (24.07.2011 в 00:24)   письмо автору
 
   для: Valick   (24.07.2011 в 00:11)
 

TIGRUS сообщил, что строчек 10, вряд ли файл зверски большой.

  Ответить  
 
 автор: Valick   (24.07.2011 в 00:39)   письмо автору
 
   для: cheops   (24.07.2011 в 00:24)
 

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

  Ответить  
 
 автор: Киналь   (24.07.2011 в 15:16)   письмо автору
 
   для: Valick   (24.07.2011 в 00:39)
 

А что тут ещё можно придумать, при десяти-то строчках? Не в БД же перегонять.

  Ответить  
 
 автор: TIGRUS   (24.07.2011 в 15:25)   письмо автору
 
   для: Valick   (24.07.2011 в 00:39)
 

В общем надо сделать так:
Ф-я считывания:

<?php 
function read_file ()
{
???
//Здесь, наверное, нужно считать файл в массив, а потом им как-то оперировать, чтобы пр каждом
 //исполнении ф-и возвращалась следующая строка из файла.
???
return 
$string
}
?>

Основная ф-я:
<?php
$variable 
read_file ();
for (
$i=0i<11i++)
{
$input->set_value_by_name('name',$variable);
}
?>


При каждом исполнение цикла переменной $variable должна присваиватся следующая строка с файла.

  Ответить  
 
 автор: Киналь   (24.07.2011 в 15:31)   письмо автору
 
   для: TIGRUS   (24.07.2011 в 15:25)
 

При исполнении всего php-файла целиком нужно использовать все десять слов или только одно, очередное?

  Ответить  
 
 автор: TIGRUS   (24.07.2011 в 15:42)   письмо автору
 
   для: Киналь   (24.07.2011 в 15:31)
 

Если я правильно понял суть вопроса, то при каждом выполнении цикла нужно только одно, очередное слово. Остальные, использованные слова уже не нужны.

  Ответить  
 
 автор: Valick   (24.07.2011 в 16:18)   письмо автору
 
   для: TIGRUS   (24.07.2011 в 15:42)
 

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

  Ответить  
 
 автор: TIGRUS   (24.07.2011 в 17:46)   письмо автору
 
   для: Valick   (24.07.2011 в 16:18)
 

Ок, я буду очень благодарен, а то уже почти неделю копался с этим кодом :(

  Ответить  
 
 автор: MHz   (24.07.2011 в 20:04)   письмо автору
 
   для: TIGRUS   (24.07.2011 в 17:46)
 

<?php

$Resource 
fopen (FILE_PATH'r');
while (
$String fgets ($Resource)) echo $String.'<br>';
fclose ($Resource);

?>

  Ответить  
 
 автор: Valick   (24.07.2011 в 21:19)   письмо автору
 
   для: TIGRUS   (24.07.2011 в 17:46)
 

слегка дополнил код от Мегагерца

<?php
$file
="test.txt";
$f=fopen($file"r+t") or die("Невозможно открыть файл"); 
// Блокируем файл (разделяемая блокировка) 
flock($fLOCK_SH);    // ждём завершения процесса записи 
// В файл теперь никто не пишет, можно читать 
while ($string fgets ($f)) $input->set_value_by_name('name',$string);
fclose ($f);
?>

  Ответить  
 
 автор: TIGRUS   (24.07.2011 в 21:24)   письмо автору
 
   для: Valick   (24.07.2011 в 21:19)
 

Спасибо. Сейчас буду пробовать...

  Ответить  
 
 автор: TIGRUS   (25.07.2011 в 00:45)   письмо автору
 
   для: TIGRUS   (24.07.2011 в 21:24)
 

Да. Работает нормально. Спасибо.
А что делать, если основная функция выглядит примерно так:
<?php
$variable 
read_file ();
$variable1 read_file_1 ();
$variable2 read_file_2 ();
$variable3 read_file_3 ();
for (
$i=0i<11i++)
{
$input->set_value_by_name('name',$variable);
$input->set_value_by_name('name1',$variable1);
$input->set_value_by_name('name2',$variable2);
$input->set_value_by_name('name3',$variable3);
}
?> 


Где для $variable1, $variable2, $variable3 (также, как и для $variable) надо считать строки с определенного файла, отдельного для каждой переменной.

Думаю, что все таки, нужно сделать отдельные ф-и для каждой переменной. Хотя, может, я и ошибаюсь...

  Ответить  
 
 автор: Valick   (25.07.2011 в 00:52)   письмо автору
 
   для: TIGRUS   (25.07.2011 в 00:45)
 

а почему бы об этом не спросить в первом посте?
расскажите подробнее сколько файлов нужно использовать одновременно и что именно делает функция set_value_by_name

  Ответить  
 
 автор: TIGRUS   (25.07.2011 в 01:17)   письмо автору
 
   для: Valick   (25.07.2011 в 00:52)
 

Смотрим ниже....

  Ответить  
 
 автор: Yuriev   (24.07.2011 в 13:44)   письмо автору
 
   для: Киналь   (23.07.2011 в 23:55)
 

Это := что такое?

  Ответить  
 
 автор: Киналь   (24.07.2011 в 15:14)   письмо автору
 
   для: Yuriev   (24.07.2011 в 13:44)
 

А, фу-ты ну-ты. Двоеточие лишнее, конечно.

  Ответить  
 
 автор: f111   (24.07.2011 в 21:54)   письмо автору
 
   для: Yuriev   (24.07.2011 в 13:44)
 

паскалевский синтаксис

  Ответить  
 
 автор: Киналь   (24.07.2011 в 22:00)   письмо автору
 
   для: f111   (24.07.2011 в 21:54)
 

В данном случае МЭКовский) Последнее время для ПЛК пишу, а там свой язык (стандарта МЭК).

  Ответить  
 
 автор: TIGRUS   (25.07.2011 в 01:21)   письмо автору
 
   для: TIGRUS   (23.07.2011 в 23:22)
 

Функцию set_value_by_name привел просто для примера, ибо первая впала мне в глаза в одном скрипте.
Сколько файлов нужно будет использовать неизвестно. Было бы хорошо сделать универсальную функцию и потом, если нужно, копировать ее куда надо, меняя при этом только имя самой ф-и, имена переменных и путь к файлу.
Сам скрипт с функциями можно сделать отдельно, чтобы потом его подключать.

Основной скрипт выглядит примерно так:
<?php
$variable 
read_file ();
$variable1 read_file_1 ();
$variable2 read_file_2 ();
$variable3 read_file_3 ();
for (
$i=0i<11i++)
{
//some code
$input->set_value_by_name('name',$variable);
//some code
$input->set_value_by_name('name1',$variable1);
//some code
$input->set_value_by_name('name2',$variable2);
//some code
$input->set_value_by_name('name3',$variable3);
//some code
}
//some code
?> 

  Ответить  
 
 автор: Valick   (25.07.2011 в 01:43)   письмо автору
 
   для: TIGRUS   (25.07.2011 в 01:21)
 

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

  Ответить  
 
 автор: TIGRUS   (25.07.2011 в 02:06)   письмо автору
 
   для: Valick   (25.07.2011 в 01:43)
 

Ну я тогда не понимаю, как еще, более логично, решить мою проблему...
Если не трудно, подкинь, пожалуйста, какую-нить хорошую идейку ;)
Задача ведь не очень сложная...
Надо сделать так, чтобы при каждом исполнении цикла переменным $variable, $variable1, $variable2, $variable3 было присвоено слово с очередных строчек файлов.

зы. спасибо!

  Ответить  
 
 автор: Valick   (25.07.2011 в 07:43)   письмо автору
 
   для: TIGRUS   (25.07.2011 в 02:06)
 

Задача ведь не очень сложная...
да поймите вы, задача не сложная... её попросту нет
__
возьмите лопату и пойдите выкопайте во дворе три универсальных ямы, а еще лучше неограниченное количество универсальных ям

  Ответить  
 
 автор: Киналь   (25.07.2011 в 08:45)   письмо автору
 
   для: TIGRUS   (25.07.2011 в 01:21)
 

Так вам нужно, значит, не одну строку за раз, а несколько?
Тогда можно делать так, как я предлагал в начале (через file()), и брать несколько нужных элементов массива. Но ещё в дополнительном файле нужно тогда хранить номер следующего элемента массива (то есть номер строки, с которой нужно начать в следующий раз).

  Ответить  
 
 автор: Valick   (25.07.2011 в 09:24)   письмо автору
 
   для: Киналь   (25.07.2011 в 08:45)
 

человеку нужно одну строку за раз, но из разных файлов (пять, десять, сто и тд) количество которых заранее неизвестно и ничем не ограничено
___
я могу написать функцию, которая открывала бы все файлы в определенной директории, потом читать из них построчно, но если возникает такая задача, значит что-то не так с условием, тут определенно нужен другой подход

  Ответить  
 
 автор: TIGRUS   (25.07.2011 в 13:26)   письмо автору
 
   для: Valick   (25.07.2011 в 09:24)
 

Вот такая функция мне и нужна.
Задача - написать что-то похожее на генератор слоганов. Первое слово вставляется с одного файла, второе со второго, третье с третьего и так далее. НО, слова должны вставляться по очереди, т.е. по первому слову с каждого файла, потом по второму, по третьему и т.д.
Эти действия должны повторятся ровно столько раз, сколько задано в цикле. Т.е. если цикл с таким условием ($i=0, i<10, i++), то должно сгенерироваться 10 разных слоганов.

Так, думаю, будет более понятно. Слова должны считываться именно по порядку, а не рандомно. Знаю, что рандомно было бы более удобно для генерации слоганов, но все же, нужно по порядку.

  Ответить  
 
 автор: Valick   (25.07.2011 в 13:39)   письмо автору
 
   для: TIGRUS   (25.07.2011 в 13:26)
 

так вы спамер мил человек)) то-то все так завуалированно

  Ответить  
 
 автор: TIGRUS   (25.07.2011 в 13:57)   письмо автору
 
   для: Valick   (25.07.2011 в 13:39)
 

Нет, не спаммер. Просто хотел создать авторегистратор для одного сайта.

  Ответить  
 
 автор: Valick   (25.07.2011 в 13:59)   письмо автору
 
   для: TIGRUS   (25.07.2011 в 13:57)
 

типа вот так

<?php
$d
="data";
$dir=getcwd()."/".$d;
// Открыть заведомо существующий каталог и начать считывать его содержимое
if(is_dir($dir)){
    if(
$dh opendir($dir)){
        while((
$file readdir($dh)) !== false){
            if(
is_file($dir."/".$file)){
                
$f[basename($file,".txt")]=fopen($dir."/".$file,"r+t") or die ("Невозможно открыть файл :".$file);
            }    
        }
        
closedir($dh);
    }
}
for(
$i=0;$i<11;$i++){
foreach(
$f as $key=>$value){
echo 
$string fgets ($value)." ";
}
echo 
"<br />";
}
?>

__
после копирования доработать напильником :)

  Ответить  
 
 автор: TIGRUS   (25.07.2011 в 14:05)   письмо автору
 
   для: Valick   (25.07.2011 в 13:59)
 

Спасибо. Сейчас буду пробовать. Но этих файлов не настолько много, чтобы открывать целый каталог с ними :)

  Ответить  
 
 автор: Valick   (25.07.2011 в 14:32)   письмо автору
 
   для: TIGRUS   (25.07.2011 в 14:05)
 

так проще, просто кинул файл в каталог и скрипт уже работает с ним

  Ответить  
 
 автор: Киналь   (25.07.2011 в 13:26)   письмо автору
 
   для: Valick   (25.07.2011 в 09:24)
 

Ах вот оно что. Как всё сложно-то) В самом деле, уважаемый TIGRUS, опишите, пожалуйста, свою задачу полностью. А то уж как-то слишком заковыристо получается.

  Ответить  
 
 автор: TIGRUS   (25.07.2011 в 14:01)   письмо автору
 
   для: Киналь   (25.07.2011 в 13:26)
 

Ладно, сейчас распишу полностью.
Есть скрипт, который заполняет формы на сайте при регистрации. Некоторые из них (логин, пароль, имя, фамилия, дата рождения и т.п.) хотелось бы заполнить так, чтобы они не дублировали один одного, т.е. чтобы не было аккаунтов с одинаковыми именами, фамилиями и т.п., поэтому и решил их брать с заранее подготовленного файла.

Целый скрипт уже почти готов, осталось только сделать считывание логинов, паролей, имен и фамилий с файла.

Если кто-то поможет мне сделать то, что я прошу, я скину ему свой скрипт, если, конечно, нужно)

  Ответить  
 
 автор: Valick   (25.07.2011 в 14:33)   письмо автору
 
   для: TIGRUS   (25.07.2011 в 14:01)
 

Вы определенно спамер :))))

  Ответить  
 
 автор: TIGRUS   (25.07.2011 в 15:01)   письмо автору
 
   для: Valick   (25.07.2011 в 14:33)
 

Да нет. Просто регистрировать 40 аккаунтов немного долго...

  Ответить  
 
 автор: Valick   (25.07.2011 в 15:05)   письмо автору
 
   для: TIGRUS   (25.07.2011 в 15:01)
 

вот вот, зачем честному человеку (не спамеру) регистрировать 40 аккаунтов)))
да ладно каюсь,я и не такое спамерам помогал
но там задача уж больно интересная была)
__
не обращайте внимания, просто настроение хорошее ) ... (еще никто не испортил)

  Ответить  
 
 автор: TIGRUS   (25.07.2011 в 15:21)   письмо автору
 
   для: Valick   (25.07.2011 в 15:05)
 

Спасибо за помощь.
Это типо как приглашения, чтобы добыть определенный статус на сайте.
И еще такой вопрос есть. Просто интересно.
Возможно ли средствами пхп подключится к удаленному рабочему столу? :D

  Ответить  
 
 автор: Valick   (25.07.2011 в 15:26)   письмо автору
 
   для: TIGRUS   (25.07.2011 в 15:21)
 

Возможно ли средствами пхп подключится к удаленному рабочему столу? :D
о ужас!!! вы еще и хакер))) нет невозможно такое
хотя есть exec, а с ним можно все что угодно

  Ответить  
 
 автор: TIGRUS   (25.07.2011 в 16:18)   письмо автору
 
   для: Valick   (25.07.2011 в 15:26)
 

Про екзец знаю, спасибо.
Я не хакер. Просто интересно, на сколько широко можно использовать пхп :)

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

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