Fwrite - это выполнено? - PullRequest
       14

Fwrite - это выполнено?

0 голосов
/ 11 февраля 2010

У меня есть куча писем, которые пишут в текстовый файл. Однако кажется, что новая строка ("\ n"), которую я хочу после каждой строки, никогда не вставляется, поскольку следующий набор данных привязан к последней строке, которую этот код вставляет в текстовый файл:

while(odbc_fetch_row($result)){

        if($counter==0){

            $counter3 = 1;

            foreach($column_names as $column_names2){

                if($length!=$counter3){

                    fwrite($write_file, '"'.$column_names2.'",');

                }else{

                    fwrite($write_file, '"'.$column_names2.'"');

                }

                $counter3++;

            }

            //echo 'Never gets executed???';
            fwrite($write_file, "\n");

            $counter = 1;

        }

Есть идеи, что происходит?

Я вставил "\ n \ n" в качестве быстрого теста. Что странно, если я смотрю на это в блокноте, он все еще слипается, но если я смотрю на это в WordPad, он показывает разрыв строки?!

Ответы [ 6 ]

4 голосов
/ 11 февраля 2010

Как и предполагали другие, это, вероятно, связано с тем, как символы новой строки кодируются в вашей ОС.

Однако вместо того, чтобы явно выводить специфичный для Windows "\ r \ n", я предлагаю вам попробовать открыть файл в текстовом (а не в двоичном) режиме. Преимущество открытия в текстовом режиме заключается в том, что система преобразует окончания строк в любой формат, подходящий для этой ОС. Таким образом, ваш код должен быть более переносимым и (надеюсь) работать должным образом в Windows / Linux / Mac и т. Д.

Предполагая, что вы используете PHP, вы можете передать "флаг перевода текстового режима" ('t') в fopen.

1 голос
/ 11 февраля 2010

Это не проблема с вашим кодом, а проблема с вашим зрителем. Смена зрителей решит вашу проблему. Изменение ограничителей строки на то, что понимает ваш зритель (\ r \ n), также решит проблему. Важно написать терминатор строки так, чтобы программа, которая впоследствии будет его использовать, могла его понять. Если это просто зритель, то измените терминатор строки. Если это другая программа, которая ожидает только символ новой строки, измените средства просмотра.

1 голос
/ 11 февраля 2010

Прочтите это о символах новой строки в различных ОС.

Windows указывает новую строку, используя CR + LF (т.е. \r\n), в то время как в UNIX-подобных системах используется только LF (\n).

CR = возврат каретки
LF = перевод строки

Так что вы, вероятно, должны использовать \r\n. Но другие программы, такие как Wordpad, похоже, тоже понимают \n.


Наилучшим способом является использование PHP-константы PHP_EOL, в которой используется индикатор конца строки текущей ОС, скрипт выполняется:

fwrite($write_file, PHP_EOL);
1 голос
/ 11 февраля 2010

код выглядит ок.

Может ли быть так, что вы просматриваете файл с приложением Windows, которое не может обработать \n разрывы строк? Что произойдет, если вы замените \n чем-то другим?

0 голосов
/ 11 февраля 2010

вы можете попробовать использовать \r\n

0 голосов
/ 11 февраля 2010

Попробуйте использовать окончания строки CRLF:

"\r\n"
...