Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Чтение из файла


Автор: Гость_Андрей 28.10.2003, 12:56
Мне надо начать читать файл с 2 строки, как это сделатьconfused.gif
Файл:
Код
вас|1
Петя|2
Сергей|4
Саша|9

Автор: Dr.Death 28.10.2003, 13:01
$lines=file("test.txt");
for($i=1;$i<count($lines);$i++)
{
print $lines[$i];
}

Автор: IZ@TOP 28.10.2003, 13:01
$line = file('file.txt'); // Загоняем в массив строки из файла с данными

И читаем

for( $i = 1; $i < count($line); $i++ ) {
//Делаем то что надо ...
}

Автор: Solid 3.11.2003, 20:10
Это слишком медленный метод ;)
Лучше всего:

Код
$fp = fopen($filename, r);
$array = explode("\r\n", fread($fp, filesize($filename)));
for($i=1; $i<count($array); $i++) {
echo $array[$i];
}

Автор: IZ@TOP 4.11.2003, 08:59
Solid, интересный код smile.gif Но быстрее будет явно так:
Код

$fp = fopen( $filename, "r" );
$array = explode( "\r\n", fread($fp, filesize( $filename ) ) );
$i = 0;
while( $i < sizeof( $array ) ) {

   echo $array[$i];

}


rolleyes.gif

Автор: Solid 4.11.2003, 18:05
Ну не знаю, не знаю. В C/С++ это может быть ещё и имеет разницу (while и for), а вот в в php, помоему, уже разница некакая. Хотя может быть, может быть.

Автор: IZ@TOP 4.11.2003, 18:15
Может быть! Я конечно не тестировал, но пишут что while намного быстрее.

Автор: arial 4.11.2003, 18:33
Ну и как вариант предлагаю использовать не \r\n, а только \n. Не часто найдешь счастливца с WIN.

Автор: Гость_Андрей 4.11.2003, 19:07
Спасибо

Автор: IZ@TOP 4.11.2003, 19:40
arial, http://www.mp3.ru - счастливец с WIN biggrin.gif

Автор: Secandr 5.11.2003, 08:29
В пхп есть разница меэду for, while, foreach. Но заметно это на больших массивах.
P.S. Ещё join можно использовать smile.gif

Автор: IZ@TOP 5.11.2003, 08:41
Secandr, join это для соединения массива в одну строку? Вроде ...

Автор: Secandr 5.11.2003, 08:47
Код
$fp = fopen( $filename, "r" );
echo join('',explode( "\r\n", fread($fp, filesize( $filename ) ) ));
Так тоже можно. Правда я не знаю что explode делает.

Автор: IZ@TOP 5.11.2003, 11:14
Secandr, explode( SEPARATOR, string ) разбивает строку string на массив.
Пример:
Строка - $string = "name|password|mail ";
Separator $sep = "|";

$l = explode( $sep, $string );

Выходной массив

$l = array(
0=>"name",
1=>"password",
2=>"mail"
);

Вот такая вот функция, работает намного быстрее split'a. Советую в любых случаях где она может быть применима использовать именно ее.

Автор: Гость_Андрей 5.11.2003, 20:33
Цитата
Secandr, explode( SEPARATOR, string ) разбивает строку string на массив.
Пример:
Строка - $string = "name|password|mail ";
Separator $sep = "|";
Я это и хотел от вас увидеть, спасибо!

Автор: Unregistered 5.11.2003, 20:35
А если у на файл
Код
123123213
вас|1
Петя|2
Сергей|4
Саша|9

Да, именно такой, я не ошибся, первая строка не подходит по правилам, но надо читать со строчки вас|1. Как быть в таком случаеconfused.gif

Автор: Secandr 5.11.2003, 20:45
удали первую строку из массива. Только боюсь опять с perl'oм попутать.
Iz@top>> Спасибо за коментарий.

Автор: Crot 3.2.2004, 15:55
Хочу узнать.
Возможно ли чтение из двоичного файла переменной типа double?
Если да, то как это сделать?

Автор: Vaulter 3.2.2004, 17:12
split это аналог explode но для регулярных выражений...;)

Автор: Sardar 3.2.2004, 21:24
Crot
Цитата
Хочу узнать.
Возможно ли чтение из двоичного файла переменной типа double?
Если да, то как это сделать?

built-in средствами нельзя, но можно:
1) использовать (un)serialize() - для (де)сериализации и записи/чтения их в/из файл(а) стандартным для PHP способом
2) найти плагин реализующий эти функции, твой код станет не переносимым.

Автор: Crot 4.2.2004, 11:24
Что-то я не понял... :(

Я, конечно, хочу чтобы код был переносимым.

Приведите, пожалуйста, пример того, как это сделать.

Вот, допустим дан некоторый файл,
Код
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|   |   |   | X | X | X | X | X | X | X | X |   |   |   |   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

в котором я должен пропустить 3 байта и, затем, считать 8 байтов в переменную $d, представляющую число типа double.
Как это реализовать?

Автор: Sardar 4.2.2004, 19:49
PHP не работает с бинарным представлением double. Вместо этого можно:
- переписать прогу так, что бы она писала/читала double в виде строки: 0.123, PHP сам обратит строку в double(можно через doubleval()).
- можно самому прочесть 11 битов экспоненты и 52 бита мантиссы, умножить мантиссу на 2 в степени экспоненты. Если все еще есть желание то http://www.delphikingdom.ru/asp/viewitem.asp?UrlItem=/helloworld/reals.htm.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)