Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: запись в файл
 
 автор: Lelik   (05.02.2007 в 14:36)   письмо автору
 
 

Инфа для записи в файл выводится из БД, после чего сразу записывается в файл.
Проблема в следующем: при записи в файл .csv, некоторые данные, которые должны записываться в одну ячейку, могут записываться по разным ячейкам, а иногда и по разным строкам. как поправить проблему? я пробовал экранировать символы табуляции и переноса на новые строки, а также ";".

   
 
 автор: вит   (05.02.2007 в 20:16)   письмо автору
 
   для: Lelik   (05.02.2007 в 14:36)
 

Надо сделать предварительный вывод из базы на экран, и посмотреть на разделители строк и столбцов, каждая строка файла это строка таблицы, а вот столбцы разделяются определенным разделителем например ; просто ты что-то с чем то перепутал и экранировать ненадо ничего

   
 
 автор: Lelik   (06.02.2007 в 13:47)   письмо автору
 
   для: вит   (05.02.2007 в 20:16)
 

возможно я что-то напутал, но при выводе из БД данных на экран, все отображалось нормально, только в файл криво записывается :(

   
 
 автор: ZuArt   (06.02.2007 в 13:54)   письмо автору
 
   для: Lelik   (05.02.2007 в 14:36)
 

Боюсь, что тут загвоздка заключается не в экранировании, а в том, что в формате *.csv символ-разделитель колонок не должен встречаться в наполнении ячеек =(... даже экранированные табуляторы при записи в файл читаются как табуляторы и воспринимаются как разделители ячеек =(.
Выход только такой, чтобы не экранировать табулятор в ячейке, а заменять его на N-ое кол-во пробелов =(

   
 
 автор: Lelik   (06.02.2007 в 14:09)   письмо автору
 
   для: ZuArt   (06.02.2007 в 13:54)
 


<?php
function repl($txt)
    {
        
$txt str_replace(";"","$txt);
        
$txt str_replace("\n"","$txt);
        
$txt str_replace("\t"","$txt);
        
$txt str_replace("    "","$txt);
        
$txt trim($txt);
        return 
$txt;
    }
?>

этой функцией обрабатываб текст, который записываю в БД, и все равно криво записывается

   
 
 автор: ZuArt   (06.02.2007 в 14:46)   письмо автору
 
   для: Lelik   (06.02.2007 в 14:09)
 

эээ.. а зачем ты все символы служебные на запятые заменяешь??? =(
и какой символ ты используешь в качестве разделителя столбцов?

   
 
 автор: mihdan   (06.02.2007 в 14:52)   письмо автору
 
   для: Lelik   (06.02.2007 в 14:09)
 

вот это и есть решение я сам так делал, отлично работает

   
 
 автор: Lelik   (06.02.2007 в 15:01)   письмо автору
 
   для: mihdan   (06.02.2007 в 14:52)
 

эээ.. а зачем ты все символы служебные на запятые заменяешь??? =(
и какой символ ты используешь в качестве разделителя столбцов?

таким образом я обрабатываю текст, разделитель пишу отдельно

вот это и есть решение я сам так делал, отлично работает
не совсем отлично, а точнее криво. Записывает в файл не так как надо, может я не все заэкрнировал ?

   
 
 автор: mihdan   (06.02.2007 в 15:28)   письмо автору
 
   для: Lelik   (06.02.2007 в 15:01)
 

Приведите кусок кода, чтобы посмотреть что вы вообще делаете- просто не могу понять что не так у меня работает! Как вы применили данную ф-ю??????????

   
 
 автор: Lelik   (06.02.2007 в 15:33)   письмо автору
 
   для: mihdan   (06.02.2007 в 15:28)
 


<?php
$file 
fopen($_SERVER['DOCUMENT_ROOT']."/poll_results/file.csv""w");
        if(!
$file){
            
$file fopen($_SERVER['DOCUMENT_ROOT']."/poll_results/file.csv""w+");
            if(!
$file) exit("f**k 1");
            else 
$file fopen($_SERVER['DOCUMENT_ROOT']."/poll_results/file.csv""w");
        }

        
fwrite($file,"Имя пользователя");
        
fwrite($file";");
        
fwrite($file,"Как часто ты заходишь на сайт SFC?");
        
fwrite($file";");
        
fwrite($file,"Какой тип доступа в интернет ты используешь?");
        
fwrite($file";");
        
fwrite($file,"В каких активностях клуба ты участвовал?");
        
fwrite($file";");
        
fwrite($file,"Как ты оцениваешь языковое разделение сайта: техническая часть - на украинском, пользовательская - на русском языке?");
        
fwrite($file";");
        
fwrite($file,"Какой язык сайта для тебя удобней?");
        
fwrite($file";");
        
fwrite($file,"Как ты оцениваешь навигацию сайта?");
        
fwrite($file";");
        
fwrite($file,"Как ты можешь охарактеризовать сайт?");
        
fwrite($file";");
        
fwrite($file,"Какие призы ты хотел бы получать за победу в конкурсах и активность в SFC?");
        
fwrite($file";");
        
fwrite($file,"Какой информации не хватает на сайте?");
        
fwrite($file";");
        
fwrite($file,"Что тебе больше всего нравится на сайте?");
        
fwrite($file";");
        
fwrite($file,"Что тебе больше всего не нравится на сайте?");
        
fwrite($file";");
        
fwrite($file,"Что ты можешь нам порекомендовать, что бы сайт стал для тебя более полезен?");
        
fwrite($file";");
        
fwrite($file"\n");
        
$query "SELECT * FROM poll_results ORDER BY id";
        
$result mysql_query($query);
        while(
$txt mysql_fetch_array($result)){
            
fwrite($filerepl($txt['username']));
            
fwrite($file";");
            
fwrite($filerepl($txt['answer1']));
            
fwrite($file";");
            
fwrite($filerepl($txt['answer2']));
            
fwrite($file";");
            
fwrite($filerepl($txt['answer3']));
            
fwrite($file";");
            
fwrite($filerepl($txt['answer4']));
            
fwrite($file";");
            
fwrite($filerepl($txt['answer5']));
            
fwrite($file";");
            
fwrite($filerepl($txt['answer6']));
            
fwrite($file";");
            
fwrite($filerepl($txt['answer7']));
            
fwrite($file";");
            
fwrite($filerepl($txt['answer8']));
            
fwrite($file";");
            
fwrite($filerepl($txt['answer9']));
            
fwrite($file";");
            
fwrite($filerepl($txt['answer10']));
            
fwrite($file";");
            
fwrite($filerepl($txt['answer11']));
            
fwrite($file";");
            
fwrite($filerepl($txt['answer12']));
            
fwrite($file";");
            
fwrite($file"\n");
        }                    
        
fclose($file);
        
header('Content-Disposition: attachment; filename="file.csv"');
        
readfile($_SERVER['DOCUMENT_ROOT']."/poll_results/file.csv");
?>

   
 
 автор: ZuArt   (06.02.2007 в 15:37)   письмо автору
 
   для: Lelik   (06.02.2007 в 15:33)
 

Если попробовать писать в конце строки не "\n" а "\r\n" + в качестве разделителя юзать не ";" а "\t" ?

   
 
 автор: Lelik   (06.02.2007 в 15:40)   письмо автору
 
   для: ZuArt   (06.02.2007 в 15:37)
 

попробую "\r\n", а при записи в .сsv-файл без разницы ";" или "\t"

   
 
 автор: Lelik   (06.02.2007 в 15:46)   письмо автору
 
   для: ZuArt   (06.02.2007 в 15:37)
 

да, забыл спросить: чего значит "\r", ведь "\n" - это новая строка?

   
 
 автор: Trianon   (06.02.2007 в 16:56)   письмо автору
 
   для: Lelik   (06.02.2007 в 15:46)
 

Вы хотите в одну ячейку csv-файла поместить сразу несколько строк?
Вы уверены, что такое вообще возможно?

   
 
 автор: Lelik   (06.02.2007 в 17:09)   письмо автору
 
   для: Trianon   (06.02.2007 в 16:56)
 

а можно "несколько строк" преобразовать в одну?

   
 
 автор: Trianon   (06.02.2007 в 17:11)   письмо автору
 
   для: Lelik   (06.02.2007 в 17:09)
 

Разделив их ... чем?

   
 
 автор: Lelik   (06.02.2007 в 17:15)   письмо автору
 
   для: Trianon   (06.02.2007 в 17:11)
 

точкой например

   
 
 автор: Trianon   (06.02.2007 в 17:38)   письмо автору
 
   для: Lelik   (06.02.2007 в 17:15)
 

Тогда Ваша функция подготовки строк должна выглядеть как-то так:
<?php
function repl($txt)
{
  return 
'"'.str_replace(array('"'"\r""\n"), array('""'"""."), $txt).'"';
}
?>

   
 
 автор: Lelik   (07.02.2007 в 11:12)   письмо автору
 
   для: Trianon   (06.02.2007 в 17:38)
 

Всем огромная благодарность :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования