[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: работа со строками
to0n1
Привет народ !! знаю вопрос ламерский, но я тоько начинаю пхп изучать.... вобщем есть файл тест.тхт в нем тесты в таком виде
Цитата

№1
Повною мiрою поняття «здоров’я» - це стан…
а) фізичного комфорту;
б) фiзичного i психологiчного комфорту;
в) соцiального i психологiчного комфорту;
г) соцiального, фiзичного i психологiчного комфорту.
№ 2
Чинник, що має найбiльший ступiнь впливу на стан здоров’я…
а) спадковiсть;
б) стан навколишнього середовища;
в) спосiб життя.

я считываю файл в массив функцией file
но вот как разобрать вопрос и каждый вариант ответа по массивам ума не могу приложить (( плюс еще надо учитывать что вариантов ответа может быть от 3 до 6 по буквам а б в г д е
натолкните на алгоритм или хоть какую функцию лучше юзать

ВСЕМ заранее спс!!!





Спустя 1 час, 4 минуты, 11 секунд (16.03.2011 - 02:05) sebastjan написал(а):
На мой взгляд , нужно определить с какой строки в массиве начнуться вопросы,
там ведь перед вопросами идёт номер и..т.д
Это наверное регулярным выражением надо.
Примерно мои грабли, сижу учу регулярные выражения.
Хотя я бы не парился со считыванием файла в масив а потом разбором.
Гораздо логичней использовать фору из которой полученный результат сравнивать.

Спустя 2 часа, 12 минут, 15 секунд (16.03.2011 - 04:17) Pulse написал(а):
В данном случае проще использовать mysql, нежели всё хранить в txt файлах, обработчик гораздо проще будет написать. Либо регулярками пробовать.

Спустя 6 часов, 31 минута, 41 секунда (16.03.2011 - 10:49) sebastjan написал(а):
Я тоже как то начал без mysql, всё мудрил на файлах,
была у меня таблица в ворде, товал - цена.
Только надо было преверять чтоб количество строк было одинаковое,
и если были какие то пустые значения , это набо было учитывать в массиве.
Так я сделал так - имена товара в один массив а цену в другой масив
типа так.

$name=array(
"xxxxxxxxx",
"aaaaaaaaaa"
);
$preis=array(
"10.20",
"5.02"
);
#vivodil v cikle
for ($i = 0; $i<sizeof($v_nam); $i++)
{
echo " Name ".$name[$i]." Preis ".$preis[$i];
}

Вот так я без mysql создавал на файлах работу, понимаю что делитанство но это мой первый опыт.

Спустя 20 минут, 52 секунды (16.03.2011 - 11:10) to0n1 написал(а):
Ну данные у меня в файлах поэтому не вижу смысла писать вначале парсер в базу а потом работать с ней...плюс хотелось бы сделать вывод вопросов не по порядку.думаю делать так считать весь файл в 1 массив потом циклом перебрать его если строка начинается с № то следующую строку записать в массив вопросов,если с а) то в массив $а и так далее...правильно ли я мыслю?

Спустя 23 минуты, 36 секунд (16.03.2011 - 11:33) Игорь_Vasinsky написал(а):
у тебя на каждый вопрос с варианам ответов - отдельный файл?

или всё в одном файле?

Спустя 12 минут, 46 секунд (16.03.2011 - 11:46) Игорь_Vasinsky написал(а):
Вот бы как я бы организовал (если принципиально на текстововых файлах база)

1. Для каждого вопроса - свой файл:
вопрос №1 - 1.txt
вопрос №2 - 2.txt

2. Содержание вопроса (файла)

1. №1
2. Вопрос
3. Овет1
4. Ответ2
5. Ответ3
6. Ответ4
7. Правильный ответ

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

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

$str[0] - номер вопроса
$str[1] - текст вопроса
$str[2] - 1 вариант ответа
$str[3] - 2 вариант ответа
$str[4] - 3 вариант ответа
$str[5] - 4 вариант ответа

А при проверки - сверяю со строкой $str[6] - правильный ответ

В таком макаре.

Но лучьше конечно форму использовать

Спустя 7 часов, 39 минут, 44 секунды (16.03.2011 - 19:26) to0n1 написал(а):
Просто вопросов очень много...и вручную кидать их по отдельным файлам не реально!а писать для этого парсер так как и писать парсер для записи вопросов в бд не вижу смысла.надо учитывать то что вариантов ответа может быть от 3 до 6.а ответы правильные для сравнения в другом файле.

Спустя 1 день, 1 час, 36 минут, 13 секунд (17.03.2011 - 21:02) faradej написал(а):
можна вот как-то так:
<?php
$file = "1.txt";
$fh = fopen('1.txt', "r");
$file_array = file("$file");
for($i=0; $i < count($file_array); $i++)
{
$arr1 = str_split($file_array[$i]);
$number = "№"; //если встречается строка с первым символом №
if($arr1['0'] == $number){ //выводится она и следущая за нею
echo ("<br/>");
printf ("$file_array[$i]");
echo ("<br/>");
$i = $i+"1";
printf ("$file_array[$i]");
echo ("<br/>");
}
$skoba = ")";
if($arr1['1'] == $skoba){ //это условие при встрече со вторым символом ')'
printf ("$file_array[$i]");
echo ("<br/>");
}
}

?>

В условия эти уже можна втыкнуть то что вам надо, это я уже не знаю... Могу еще помочь чем смогу.

Спустя 1 час, 4 минуты, 58 секунд (17.03.2011 - 22:07) sebastjan написал(а):
На мой взгляд нереальная реализация на текст файлах, всё это уместиться в один файл с формой как и было сказанно выше.

Спустя 2 часа, 2 минуты, 11 секунд (18.03.2011 - 00:09) Лена написал(а):
Лучше делать все через базу.


$a = file_get_contents("тест.тхт");

$expl = explode("№",$a);

function Elements($elm){

$str=substr(trim($elm),strpos($elm,"\n"));

return trim($str,"\n");
}

$arr = array_map('Elements', $expl);

$arr_ = array('');
$diff = array_diff($arr,$arr_);

for($i=0;$i<(count($diff)+1);$i++){

preg_match("#([^)]+)а\)(.*?)$#is",$diff[$i],$out);
$out[2] = "a)" . $out[2];
if($out[1]!='')
$arr_all[][$out[1]] = $out[2];

}
print "<pre>";
print_r ($arr_all);

foreach($arr_all as $arrKey=>$arrVal){
// $arrKey - вопрос
// $arrVal - ответы на вопрос, можно поделить каждый ответ через explode("\n",$arrVal)

}

Если первоначально файл большой, читайте не через file_get_contents, а кусками через fread()
И кажется мне, что все можно было сделать короче, через какое-нибудь хитроумное регулярное выражение.

Не поняла, что вы дальше собираетесь делать с вопросами и ответами.
Я составила массив, в котором ключи - вопросы, значения - все ответы на этот вопрос.

Спустя 9 часов, 44 минуты (18.03.2011 - 09:53) to0n1 написал(а):
Всем спасибо,код только посмотрел вечером задействую! Дальше собираюсь сделать хтмл форму и выводить туда рандомно тесты.ответ отсылать в другой скрипт который будет сравнивать с правильным ответом и считать количество правильных и не правильных ответов.

Спустя 9 часов, 33 минуты, 24 секунды (18.03.2011 - 19:26) to0n1 написал(а):
решил сделать по своему .... конечно по нубски но работает


<?php
/** to0n1 class lib **/
Class ParseTxt{
//---------ОБЬЯВЛЕНИЕ СВОЙСТВ-----//
// Имя обрабатываемого файла

var $file_name;
//Массив строк файла
var $file_array;
//Массивы вопросов и ответов
var $Q_array;
var $Q_1;
var $Q_2;
var $Q_3;
var $Q_4;
var $Q_5;
var $Q_6;
var $Q_7;
//Метод изменения пути файла
Function Get_Path(){
$this->file_name="./Qbank/". $this->file_name;
}

Function Fn_open(){
if (!empty($this->file_name)){
if (is_readable($this->file_name)){
$this->file_array=file($this->file_name);
}
Else{
echo "$this->file_name does not exist";
};
}
Else{
echo "Нужно ввести имя файла с базой вопросов";
}
}

//метод разбиения общего файла на массивы
Function Q_split(){
$number="№№";$qq="1";$q1="а)";$q2="б)";$q3="в)";$q4="г)";$q5="д)";$q6="е)";$q7="ж)";
for($i=0; $i < count($this->file_array); $i++)
{
$str= mb_substr($this->file_array[$i],0,2,"UTF-8");
switch ($str){
case $number:
$this->q_array[$qq]=$this->file_array[$i+1];
$qq++;
break;
case $q1:
$this->q_1[$qq-1]=$this->file_array[$i];
break;
case $q2:
$this->q_2[$qq-1]=$this->file_array[$i];
break;
case $q3:
$this->q_3[$qq-1]=$this->file_array[$i];
break;
case $q4:
$this->q_4[$qq-1]=$this->file_array[$i];
break;
case $q5:
$this->q_5[$qq-1]=$this->file_array[$i];
break;
case $q6:
$this->q_6[$qq-1]=$this->file_array[$i];
break;
case $q7:
$this->q_7[$qq-1]=$this->file_array[$i];
break;
}
}
}
}


Спустя 1 день, 1 час, 17 минут, 18 секунд (19.03.2011 - 20:44) to0n1 написал(а):
ребята чтото я изза своей не умелости никак не могу придумать как ответы анализировать подскажите пожалуйста

вот архив всего приложения заодно и покритикуйте де что по нубски сделал )

[url=http://zalil.ru/30700827]
вот тут все

Спустя 4 часа, 45 минут, 32 секунды (20.03.2011 - 01:29) sebastjan написал(а):
Не парься, как и говорили выше форма самое оптимальное для решения таких вещей.
Попробовал себе на Денвер поставил твой сайт и ОН не заработал, даже не стал копаться почему.

Спустя 10 часов, 31 минута, 25 секунд (20.03.2011 - 12:01) to0n1 написал(а):
Цитата
Не парься, как и говорили выше форма самое оптимальное для решения таких вещей.

Какая форма ??? перечитал вс сказанное выше никаких примеров форм не было !!!!
Цитата
Попробовал себе на Денвер поставил твой сайт и ОН не заработал, даже не стал копаться почему.


хм у меня на debian apache2+php5.3.5 все норм ....
Быстрый ответ:

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