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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переписать в CSV-файле определенную строку 
:(
    Опции темы
check
Дата 20.9.2006, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


$f = fopen("price.csv", "rt");

for ($c = 1; $row = fgetcsv($f, 200, ";"); $c++) {
  
  for ($j = 0; $j < count($row); $j++) {

     if ($row[2] == $_GET['log'])  {
 
      if ($row[3] !== $_GET['pass'])  {
          echo "Неверная пара логин-пароль!";
          break;
      }

        list($day,$month,$year) = explode(".", $row[0]);
        if (strpos($day, "0") == 0)  
             $day = substr($day, 1, 1); 
        if (strpos($month, "0") == 0)  
                 $month = substr($month, 1, 1);
         $ac = ($row[5] + $row[6] + $row[7]) / 365 * ((time() -   
         mktime(0,0,0,$month,$day,$year))/(60*60*24)) - $row[8];     
         $ac = number_format($ac, 2);
                 // ...
                 // вывод статистики
                 // ...
               break;
       }  
    }

}

fclose($f);


P.S. Только не говорите что для таких вещей существуют базы данных. 
Я знаю, что они существуют, но надо делать через Excel smile  

Это сообщение отредактировал(а) check - 20.9.2006, 14:57
PM MAIL   Вверх
ewolf
Дата 20.9.2006, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

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



Но ведь для того, чтобы использовать какие-то поля пользователя, надо сначала найти этого пользователя в файле, следовательно его надо считать.
А раз мы все равно открываем файл, почему его не записать целиком?
PM MAIL ICQ   Вверх
check
Дата 20.9.2006, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

$f = fopen("price.csv", "rt");
$rows = array(); 
$log = "lfff";  
$pass = "111";
for ($c = 1; $row = fgetcsv($f, 200, ";"); $c++) {
  $rows[] = $row;
  echo '<table width="100%" border="0" cellspacing="5">';
  for ($j = 0; $j < count($row); $j++) {
     
     if ($row[2] == $log)  {
 
      if ($row[3] !== $pass)  {
          echo "Неверная пара логин-пароль!";
          break;
      }

        list($day,$month,$year) = explode(".", $row[0]);
        if (strpos($day, "0") == 0)  
             $day = substr($day, 1, 1); 
        if (strpos($month, "0") == 0)  
$month = substr($month, 1, 1);  $row[0] = implode("", $row[0]);
 $ac = ($row[5] + $row[6] + $row[7]) / 365 * ((time() -                                            mktime(0,0,0,$month,$day,$year))/(60*60*24)) - $row[8];                                           $ac = number_format($ac, 2);
 $rows[$c] = $row[0].";".$row[1].";".$row[2].";".$row[3].";".$row[4].";".
$row[5].";".$row[6].";".$row[7].";".$row[8].";".$row[9].";".$ac;
                 // ...
                 // вывод статистики
                 // ...
                
               break;
       }  
    }

   
}
fclose($f);
echo "</table>";
$f = fopen("price.csv", "w");  echo count($rows);
for ($i = 0; $i < count($rows); $i++)
    fputs($f, $rows[$i]);   

fclose($f);

Вот тут я как раз пытаюсь всё это сделать.  В итоге записывается только  изменённая строка,а остальные теряются.  Что-то с алгоритмом я нахимичил.  
PM MAIL   Вверх
Acraft
Дата 21.9.2006, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Можно попробовать записать в массив содержимое файла, обработать массив
И заполнить файл содержимым массива. Всё.
Код

set_time_limit=0;
$separator=',';
$arr=file('price.csv')
//имеем массив, где каждая строка - элемент массива arr
for ($i=0; $i<sizeof($arr); $i++)
    {
      $str=explode($separator,$arr[$i]);
      if ('строка [элемент массива]удовлетворяет условию')
       {
         for (j=0; $j<sizeof($str); $j++)
             {
                //обрабатываем строку
             }
       }
      $arr[i]=implode($separator,$str);
      unset($str);
    }
$f=fopen('price','w');
for ($i=0; $i<sizeof($arr); $i++)
    {
      fputs($f,$arr[$i]."\n");
    }
fclose($f);


Можно обойтись одном $i-м циклом, но так нагляднее.
PM MAIL   Вверх
check
Дата 22.9.2006, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Acraft, как только я набираю 100 постов(осталось 2  smile ), в твоей репе автоматически появляется новый плюс!

Только при записи файла не надо добавлять переводы строки - они уже есть  в последнем элементе массива $arr. 
 А в общем,  всё прекрасно работает, спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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