Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как последовательно вычитывать части? 
V
    Опции темы
MyRoot
Дата 8.11.2007, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 8.11.2007

Репутация: нет
Всего: нет



Подскажите пожалуйста, может вопрос получился глупый...
Но в документациях я не нашел ответа.
Как последовательно вычитывать (fread) части строки разделенные знаком ";" для последующего помещения в переменные?
Пример:

1;10;100; \-- это исходная строка.

В итоге переменные принимают значения:

$simple=1;
$double=10;
$threevalue=100;


Заранее спасибо огромное.
PM MAIL   Вверх
GZep
Дата 8.11.2007, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: нет
Всего: 32





--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
skyboy
Дата 8.11.2007, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



  • самое  короткое решение - через explode. Тем более, что разделитель один и тот же. Правда, так ты получишь на выходе массив, а не набор переменных... Но по моему мнению, чтоб работать унифицированно лучше уж массив, чем набор разноименных переменных.
  • самое мудреное - через регулярные выражения: preg_match и регулярное выражение вроде
    Код

    ^([^;]*)*$
  • самое прямолинейное и самое простое: цикл + strpos + substr
    На самом деле, не рекомендую. Уж больно громоздко и тормознуто.

PM MAIL   Вверх
SelenIT
Дата 8.11.2007, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 8
Всего: 401



Цитата(MyRoot @  8.11.2007,  20:32 Найти цитируемый пост)
Как последовательно вычитывать

strtok?

Но, если я верно догадался, что считываются эти штуковины из файла, то, скорее всего, самое верное решение - fgetcsv.

Цитата(skyboy @  8.11.2007,  21:10 Найти цитируемый пост)
Правда, так ты получишь на выходе массив, а не набор переменных...

Если получен массив, а дальше ну никак без переменных - то list в помощь. Хотя всецело присоединяюсь к
Цитата(skyboy @  8.11.2007,  21:10 Найти цитируемый пост)
чтоб работать унифицированно лучше уж массив, чем набор разноименных переменных.



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
GZep
Дата 8.11.2007, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: нет
Всего: 32



если нужно сделать переменные, то:
Код

$parts = explode(";", "1;10;100;");
$names = array(
    "simple",
    "double",
    "threevalue"
);
for ($i = 0; $i < count($parts); $i++)
    $GLOBALS[(isset($names[$i]) ? $names[$i] : "undefined name"] = $parts[$i];
unset($parts);


Это сообщение отредактировал(а) GZep - 8.11.2007, 21:22


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
SelenIT
Дата 8.11.2007, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 8
Всего: 401



GZep, зачем такая жесть, особенно после моей последней ссылки? С потенциальными конкурентами боремся;) ?


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
MyRoot
Дата 8.11.2007, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 8.11.2007

Репутация: нет
Всего: нет



Круто. Вот это скорость smile)
Не часто такое встретишь. smile)

Большое спасибо всем. Очень помогли.

Vingrad рулит!!!
PM MAIL   Вверх
MyRoot
Дата 8.11.2007, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 8.11.2007

Репутация: нет
Всего: нет



А есть ли подобная explode'у  функция, только для строк???

Например txt файл содержит:

string1
string2
string3

А на выходе получается массив $str:

$srt[1]=string1
$srt[2]=string2
$srt[2]=string3



???

Это сообщение отредактировал(а) MyRoot - 8.11.2007, 22:47
PM MAIL   Вверх
GZep
Дата 8.11.2007, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: нет
Всего: 32



Цитата(SelenIT @  8.11.2007,  21:33 Найти цитируемый пост)
С потенциальными конкурентами боремся;)

дык, не смотрел, как другие отвечают... и вообще на винграде у меня нет конкурентов, есть только друзья!
Цитата(MyRoot @  8.11.2007,  21:53 Найти цитируемый пост)
Большое спасибо всем. Очень помогли.

спасибо за вопрос
MyRoot, я точно не уверен, но по-моему можно так, попробуй:
Код

$parts = explode("\n", $text);



--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
flashaa
Дата 8.11.2007, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



Цитата(SelenIT @  8.11.2007,  21:16 Найти цитируемый пост)
fgetcsv.

в 4 PHP эта функция присутствует, но работает некорректно.  В точности версию не скажу, но в свое время на 4.х - пхп-шной версии денвера она у меня не работала. Т.е. работала но некорректно и непонятно. Пришлось писать скрипт. О таком же факте позже читал в книге Котерова PHP5.

Цитата(MyRoot @  8.11.2007,  22:45 Найти цитируемый пост)
А есть ли подобная explode'у  функция, только для строк???

Дык функция разбивает по разделителю. Задайте разделитель в виде символа переноса строки и все то же самое.

Код

$string = explode("\r\n", $string); // Для windows-файла
$string = explode("\n", $string); // Для unix-файла


А можно универсально:

Код

$string = explode("\n", $string);
array_walk($string, 'trim');


Это сообщение отредактировал(а) flashaa - 8.11.2007, 23:04
PM MAIL   Вверх
SelenIT
Дата 9.11.2007, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 8
Всего: 401



Цитата(GZep @  8.11.2007,  22:57 Найти цитируемый пост)
вообще на винграде у меня нет конкурентов, есть только друзья!

GZep, сорри, не имел в виду ничего плохого, просто приведенная конструкция через, гм... $GLOBALS показалась мне несколько странной по сравнению с
Код
list($simple, $double, $threevalue) = explode(";", "1;10;100;");

 smile 

Цитата(flashaa @  8.11.2007,  22:59 Найти цитируемый пост)
работает некорректно

flashaa, это случайно не про этот древнейший баг? Надо же, никак не мог представить, что он еще хоть как-то актуален. Впрочем, судя по комментам, в актуальных версиях проблема решается настройкой локали, а адекватная локаль в любом случае рано или поздно понадобится...

Цитата(flashaa @  8.11.2007,  22:59 Найти цитируемый пост)
А можно универсально:

Легко. В качестве альтернативного варианта -
Код

$strings = explode("\n", str_replace("\r", "", $string)); // древние маки в расчет не берем ;)



MyRoot, а вообще озвучили бы Вы конечную цель этих операций - может, совместными усилиями коллективного разума;) мы предложили бы более короткое/эффективное решение...



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
MyRoot
Дата 9.11.2007, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 8.11.2007

Репутация: нет
Всего: нет



Еще и еще раз спасибо всем за уделённое время !!!!

Вот что получилось в итоге:

Код


<?php

$file = fopen("file.txt","r");
      if(!file)
        {
          echo("Ошибка открытия файла.");
        }
        else
        {
         $allcontent = fread ($file,2400);
         $string = explode("\n", str_replace("\r", "", $allcontent));
         $row_0 = explode(";", $string[0]);
         $row_2 = explode(";", $string[2]);
         echo ("$row_0[0]-- первый кусок до разделителя ';', от первой строки файла ");
         echo ("$row_0[3]-- четвёртый кусок до разделителя ';', от первой строки файла ");
         echo ("$row_3[0]-- первый кусок до разделителя ';', от третьей строки файла ");
        }

?>


По сути нужен был доступ к каждой псевдо ячейке из псевдо таблицы в файле вида:

1a;1b;1c;1e
2a;2b;2c;2e

Не знаю на сколько это актуально в современном мире, но задача была имеено такая ;)))
PM MAIL   Вверх
GZep
Дата 9.11.2007, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: нет
Всего: 32



Цитата(SelenIT @  9.11.2007,  00:36 Найти цитируемый пост)
GZep, сорри, не имел в виду ничего плохого, просто приведенная конструкция через, гм... $GLOBALS показалась мне несколько странной по сравнению с

точно... то, что я написал можно сделать одной функцией - extract.


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0584 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.