![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| WebCob |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 4.8.2004 Репутация: нет Всего: нет |
Суть заключается в том, что есть CSV файл содержащий поля A;B;C;D;E;F
Поля A и В числовые. А это начало диапазона, В это конец диапазона. Поиск производится только по диапазону. В случае, если введенное число соответствует одному из диапазонов, то нужно вывести на print поля C;D;E;F именно той строки в которой было найдено число Э диапазону. |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 10 Всего: 73 |
И какие проблемы?
-------------------- Теперь при чем :P |
|||
|
||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
Ignat
Зачем такой изврат с foreach??? Мне кажется что эту конструкцию в данном случае лучше заменить на for. -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 10 Всего: 73 |
А чччёрт его знает, мне почему-то больше foreach нравится, можно еще while сделать, кстати, пример из мануала
-------------------- Теперь при чем :P |
|||
|
||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
Ignat
Про мануал то понятно. Просто работа цикла foreach по понятным соображениям в несколько раз медленее чем for. PS Правила улучшения производительности, часть 1. -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 10 Всего: 73 |
Уговорил:
Это сообщение отредактировал(а) Ignat - 5.8.2004, 08:57 -------------------- Теперь при чем :P |
|||
|
||||
| WebCob |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 4.8.2004 Репутация: нет Всего: нет |
У меня это получилось так:
$massive = file("test1.csv", "r"); $count_data = count($massive); for($i=0; $i<$count_data; $i++) $data = explode(";", $massive[$i]); $index_no[$i] = $data[0]; $begin_count[$i] = $data[1]; $end_count[$i] = $data[2]; $start_action[$i] = $data[3]; $end_action[$i] = $data[4]; $info_action[$i] = $data[5]; $data[1] = array($begin_count[$i]); $data[2] = array($end_count[$i]); $data_count = count($begin_count); while (--$data_count+1) if ($begin_count[$data_count] <= $int_no and $int_no <= $end_count[$data_count]) Но работать не хочет. По умолчанию выводит информацию из последней строки полей C;D;E;F Все заганяется в массив, потом индексируется. А вот дальше я не соображаю как сделать... |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 10 Всего: 73 |
Ничего у тебя в массив не загоняется - только последняя строчка файла. Скобки поставь.
-------------------- Теперь при чем :P |
|||
|
||||
| WebCob |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 4.8.2004 Репутация: нет Всего: нет |
На счет последней строчки, ладно скобки поставлю. А вот на счет моего вопроса:
Поля A и В числовые. А это начало диапазона, В это конец диапазона. Поиск производится только по диапазону. В случае, если введенное число соответствует одному из диапазонов, то нужно вывести на print поля C;D;E;F именно той строки в которой было найдено число Э диапазону. В моем примере А=$begin_count[$i], а В=$end_count[$i]. Нужно, чтобы найдя нужное значение между А и В в какой то из строк, выводилась информация полей C;D;E;F принадлежащие этой строке. |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 10 Всего: 73 |
Пожди, а мой пример что делает - обратно в файл, чтоль, записывает?
-------------------- Теперь при чем :P |
|||
|
||||
| WebCob |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 4.8.2004 Репутация: нет Всего: нет |
А Ты бы мог дать пояснение к примеру? Этот пример, есть и на www.php.net. Но я нет так хорошо знаю PHP поэтому пока-что не поворотлив в нем. Если можно, то на моем примере. То, что задаем число, читаем файл, потом задаем цикл, и считаем строки задавая каждому $lines - свой номер строки, а что вот это:
($nums[0]<$number&&$nums[1]>$number)?echo $lines[$i]:""; Что она делает прежде чем выведет на печать? Что такое $nums[0]? $number&&$nums[1]>$number - сравнение? тогда что с чем? |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 10 Всего: 73 |
Конструкция ... ?... : .... ; Берет свое начало в си - это аналог if(....){ ....}else{.....}; , но в одну строчку.
($nums[0]<$number&&$nums[1]>$number)?echo $lines[$i]:""; Здесь ($nums[0]<$number&&$nums[1]>$number) - условие. $nums[0]-A, $nums[1]-B, && - "И"(AND) echo $lines[$i] - блок THEN "" - блок ELSE (т.к. пустой ставим кавычки). Explode есть и в твоем примере, думаю, с ним все понятно. -------------------- Теперь при чем :P |
|||
|
||||
| WebCob |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 4.8.2004 Репутация: нет Всего: нет |
Наверное я не правильно описал то что я хочу сделать.
Чего то не получается у меня... www.php.net, уже весь перевернул. Создавать текстовую базу это конечно дело не благодарное но решать задачу нужно. Вот копия содержимого test1.csv файла. index_no;begin_count;end_count;start_action;end_action;info_action 1;lrmos117720000;lrmos117729999;01.05.2000;04.08.2004;Продается в салоне А 2;lrmos117730000;lrmos117739999;09.07.2001;05.08.2004;Продается в салоне В 3;lrmos117740000;lrmos117749999;15.08.2002;06.08.2004;Продается в салоне С 4;lrmos117750000;lrmos117759999;01.03.2002;07.08.2004;Продается в салоне D 5;lrmos117760000;lrmos117769999;01.01.2003;08.08.2004;Продается в салоне E 6;lrmos117770000;lrmos117779999;08.02.2003;09.08.2004;Продается в салоне F 7;lrmos117780000;lrmos117789999;30.07.2004;10.08.2004;Продается в салоне G 8;lrmos117790000;lrmos117799999;04.08.2004;11.08.2004;Продается в салоне H Вот моя программа, которая должна обрабатывать csv файл и выводить на принт информацию только той строки в которой найден счет (к примеру: lrmos117720527, то вывести на принт поля 01.05.2000;04.08.2004;Продается в салоне А) <?php /*Okno dlya vvoda*/ print "<FORM NAME='card' METHOD=get><center><h1><br>"; print "<h2><font color=black>Введите счет начинающийся c lrmos.<br>"; print "<INPUT TYPE=text NAME=int_no SIZE=15>"; print "<INPUT TYPE=SUBMIT NAME=button VALUE=Enter><br>"; if ($button=="Enter") /*Finish Okno dlya vvoda*/ $massive = file("test1.csv", "r"); $count_data = count($massive); for($i=0; $i<$count_data; $i++) $data = explode(";", $massive[$i]); $index_no[$i] = $data[0]; $begin_count[$i] = $data[1]; $end_count[$i] = $data[2]; $start_action[$i] = $data[3]; $end_action[$i] = $data[4]; $info_action[$i] = $data[5]; $data[1] = array($begin_count[$i]); $data[2] = array($end_count[$i]); $data_count = count($begin_count); while (--$data_count+1) print "<br> $data[$i]- i<br>$int_no<br>$data[0]-0<br>$data[1]-1<br> $data[2]-2<br>$data[3]-3 $data[4]-4<br> $data[5]-5<br>\n"; if ($begin_count[$data_count] <= $int_no and $int_no <= $end_count[$data_count]) ?> Может есть идеи? С примером выше я уже пробовал. |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 10 Всего: 73 |
Лови, если не работает, скажи, тогда проверю. А сейчас со временем не очень.
-------------------- Теперь при чем :P |
|||
|
||||
| WebCob |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 4.8.2004 Репутация: нет Всего: нет |
Ок! У меня со временем тоже не особо, по этому понимаю. Ignat я через парочку минут и скажу Тебе.
|
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |