За последние 24 часа нас посетили 33010 программистов и 1821 робот. Сейчас ищут 847 программистов ...

Как отредактировать ячейку или столбец в csv файле?

Тема в разделе "PHP для новичков", создана пользователем Bridun, 1 янв 2018.

Метки:
  1. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    Подскажите как отредактировать ячейку или столбец в csv файле? средствами php

    Есть csv файл с 6 строк скажем

    id,найменование,цена,количество,сума

    PHP:
    1. 1,ложка,34,2,32
    2. 2,кружка,23,4,66
    3. 3,тарелка,45,6,352
    4. 4.вилка,21,3,235
    скажем как перезаписать суму 34*2=

    PHP:
    1.  $cart = file("data/file.csv");
    2.  
    3.   $total_sum = 0;
    4. $summa = 0;
    5. foreach($cart as $elem => $line)
    6. {
    7.     if(!strripos($line, ",")) continue;
    8.     $elem = explode(",",$line);
    9.     $summa += $elem[2];
    10.  
    11.   echo '<tr>
    12.   <td>'.$elem[1].'</td>
    13.   <td>'.$elem[2].'</td>
    14.   <td>'.$elem[3].'</td>
    15.   <td>'.$elem[2] * $elem[3].'</td>
    16.   <td>'.$elem[4].'</td>
    17.   </tr>';
    18. }
    19.  
    20.    echo '<tr><td colspan="3" >'.$summa.'</td>
    21.   <td>'.$total_sum.'</td><td></td></tr>';
     
  2. виталий032

    виталий032 Активный пользователь

    С нами с:
    31 янв 2014
    Сообщения:
    227
    Симпатии:
    30
    Адрес:
    Владивосток
    Можно так:
    PHP:
    1. <?php
    2. // парсим csv файл
    3. $data = array_map('str_getcsv', file('goods.csv'));
    4.  
    5. $col_number = 3; # порядковый номер поля
    6. $row_number = 1; # порядковый номер записи
    7.  
    8. // заменяем значение на 24
    9. $data[$row_number-1][$col_number-1] = 24;
    10.  
    11. // открываем файл
    12. $csv_file = fopen('goods.csv','w');
    13.  
    14. // $rows - это массив записей (с изменениями)
    15. foreach($data as $rows) {
    16.     // форматируем массив в csv и записываем в файловый указатель
    17.     fputcsv($csv_file, $rows);
    18. }
    19. // закрываем файл
    20. fclose($csv_file);
    21.  
    22. // смотрим конечный результат уже из измененного файла
    23. echo '<pre>';
    24. print_r(array_map('str_getcsv', file('goods.csv')));
    25. echo '</pre>';
     
    #2 виталий032, 1 янв 2018
    Последнее редактирование: 1 янв 2018
  3. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    Спасибо интересный вариант, и почему в конец строки, кавычки пишет 1,ложка,24,2,"32 ",. типерь нужно разложить это в форму
     
  4. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    и как перезаписать две ячейки
    --- Добавлено ---
    и как перезаписать две ячейки
     
  5. виталий032

    виталий032 Активный пользователь

    С нами с:
    31 янв 2014
    Сообщения:
    227
    Симпатии:
    30
    Адрес:
    Владивосток
    Как вариант, код ниже. В массиве $array каждый подмассив - это заменяемая ячейка и ее новое значение.
    Т.е. 1 - это запись, 5 - это поле, "VALUE1" - это новое значение.
    PHP:
    1. <?php
    2. // парсим csv файл
    3. $data = array_map('str_getcsv', file('goods.csv'));
    4. $array = [
    5.     [1,5,"VALUE1"],
    6.     [2,5,"VALUE2"]
    7. ];
    8. for($i=0;$i<count($array);$i++) {
    9.     $data[$array[$i][0]-1][$array[$i][1]-1] = $array[$i][2];  
    10. }
    11.  
    12. $csv_file = fopen('goods.csv','w');
    13. // $rows - это массив записей (с изменениями)
    14. foreach($data as $rows) {
    15.     // форматируем массив в csv и записываем в файловый указатель
    16.     fputcsv($csv_file, $rows);
    17. }
    18. // закрываем файл
    19. fclose($csv_file);
    20. // смотрим конечный результат уже из измененного файла
    21. echo '<pre>';
    22. print_r(array_map('str_getcsv', file('goods.csv')));
    23. echo '</pre>';
     
  6. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    Спасибо буду эксперементировать, я пока учусь, пробую писать корзину на файлах, может csv это дурная затея но для 5 позиций думаю хватит и это только вот csv дописывает ", изначально записываю в файл , потом какбы пользователь с ип добавляет в корзину во временый файл , потом оформляем заказ пересчитываем и записывает в файл ну вот опять как записать тольную суму, посчитат то посчитает или может посоветуйте как лучше
     
  7. виталий032

    виталий032 Активный пользователь

    С нами с:
    31 янв 2014
    Сообщения:
    227
    Симпатии:
    30
    Адрес:
    Владивосток
    Если вместо "NEW VALUE1" написать, например, сумму товара [1,5,200] , то никакие кавычки, по-крайней мере у меня, не добавляются.
    Записать также. Может быть вы про AJAX не знаете, поэтому так говорите.
    Я тоже учусь. Еще вчера я знал лишь, что CSV это формат какой-то, а сегодня я могу его парсить и манипулировать данными.
     
  8. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    щото намудрил я целую кучу а до конечного результата дойти не могу , как типерь этот обработчик пост или джет написать или как из инпут перенести значение и записать, помогуте добить это


    PHP:
    1. <table border="1" width="500" align="center" cellpadding="5" cellspacing="5" valign="top">
    2.    <tr>
    3.       <td></td>
    4.    <td>Наименование</td>
    5.    <td>Цена</td>
    6.    <td>Количество</td>
    7.    <td>Сумма</td>
    8.    </tr>
    9.    <form action="" method="POST">
    10.   <?php
    11.  
    12.   $cart = file("file.csv");
    13.  
    14.   $total_sum = 0;
    15. $summa = 0;
    16. foreach($cart as $elem => $line)
    17. {
    18.     if(!strripos($line, ",")) continue;
    19.     $elem = explode(",",$line);
    20.     $summa += $elem[2];
    21.     $total_sum += $elem[4];
    22.   echo '<tr>
    23.     <td>'.$elem[0].'</td>
    24.   <td>'.$elem[1].'</td>
    25.   <td>'.$elem[2].'</td>
    26.   <td><input type="text" name="price" size="5" value="'.$elem[3].'"  /></td>
    27.   <td>'.$elem[4].'<input type="hidden" name="total" size="5" value="'.$elem[2] * $elem[3].'"  /></td>
    28.   </tr>';}  
    29.    echo '<tr><td colspan="2" ></td><td>'.$summa.'</td><td></td><td>'.$total_sum.'</td></tr>';
    30.    echo '<tr><td colspan="4" ></td><td><input  type="submit" value="Пересчитать" name="submit" /></td></tr>';
    31.    echo '</form></table>';
    32.  
    33. // парсим csv файл
    34. $data = array_map('str_getcsv', file('file.csv'));
    35. $array = array(
    36.     array(1,4,"VALUE1"),
    37.     array(1,5,"VALUE2")
    38. );
    39. for($i=0;$i<count($array);$i++) {
    40.     $data[$array[$i][0]-1][$array[$i][1]-1] = $array[$i][2];
    41. }
    42. $csv_file = fopen('file.csv','w');
    43. // $rows - это массив записей (с изменениями)
    44. foreach($data as $rows) {
    45.     // форматируем массив в csv и записываем в файловый указатель
    46.     fputcsv($csv_file, $rows);
    47. }
    48. // закрываем файл
    49. fclose($csv_file);
    50.  
    51. ?>
     
  9. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    это запишется в одну строку а как переписать всю колонку