Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/48: Рейтинг темы: голосов - 48, средняя оценка - 4.67
3 / 3 / 0
Регистрация: 16.06.2015
Сообщений: 88

Как удалить строку из csv файла?

10.11.2015, 14:40. Показов 9166. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу понять как сделать удаление строки из csv файла.Чтобы я мог выбрать какую строчку удалять.Помогите пожалуйста.Написал вот такой вот код.Не хочет удалять при нажатие на кнопку.
Создает табличку из файла
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<link rel="stylesheet" type="text/css" href="style.css">
<script>
      function remove($e)
      {
        //alert('remove.php?id='+n);
          alert("press");
        window.location.replace('remove.php?id='+e);
      }
    </script>
        
    <script>
        function press(){
           
        var newName = prompt();
            //alert(newName);
            alert("press");
             window.location.replace('add.php?id='+newName);
        }
    </script>
    
<?php
$fo = fopen("test.csv", "r");
while (($arr = fgetcsv($fo, 1024, ";")) !== FALSE) {
$data[] = $arr;
}
 
fclose($fo);
echo "<table>";
foreach ($data as $rgArr){
        echo "<tr>";
 
  
$count = 0;
if($count == 0)
{
    foreach ($rgArr as $nValue){
    echo "<td>{$nValue}</td>";
         
    }
$count++;
}
else
{  
        foreach ($rgArr as $nValue){            
if($nValue == 0 && is_numeric($nValue)) 
{
    echo "<td class=\"red\">{$nValue}</td>";  
}elseif($nValue > 0 && $nValue < 4 && is_numeric($nValue))
{
    echo "<td class=\"green\">{$nValue}</td>";  
}elseif($nValue > 3 && is_numeric($nValue))
{
    echo "<td class=\"blue\">{$nValue}</td>";  
}else   echo "<td>{$nValue}</td>";
        }
}
 static $e = 0;
    if($e == 0){
        echo "<td>Delete</td>";
         $e++;
    }    
    else{       
      echo "<td><button class = 'delete' onclick='remove($e)'><b>X</b></button></td>";
        $e++;
     }    
        echo "</tr>";
    
}
echo "</table>";
 
 
echo "<div class='div'><button onclick = 'press()'>Add</button></div>";
 
?>
вот такой вот код для удаления строки по кнопке
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
 
    $number = $_GET["id"];
    $i=0;
 
    if (file_exists("list.tmp"))
        unlink("list.tmp");
 
    $file = fopen("test.csv", "r");
    while(!feof($file)){
      $line = fgets($file);
      if ($i != $number)
            file_put_contents("list.tmp", $line, FILE_APPEND);
      $i++;
    }
    fclose($file);
 
    rename("list.tmp","test.csv");
 
  header('Location: ind.php');
 
 
?>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.11.2015, 14:40
Ответы с готовыми решениями:

Как вставить строку из CSV-файла в массив?
Здравствуйте, Подскажите, как можно Вставить считанную из CSV-файла Строку (разделители - точка с запятой (;)) в массив с тем же...

Как удалить пробелы при формировании CSV файла (УТ10)
Формирую csv файл для выгрузки. вместо ARTIKUL_123 у меня пробелыпробелыпробелыARTIKUL_123 В базе 1c артикулы хранятся с...

Распарсить строку csv файла
Есть строки в файле разделенные пробелом Считываю в цикле fscanf(file,&quot;%s%s%s%*c&quot;, val, val, val); Подскажите как, так же разобрать...

15
162 / 161 / 66
Регистрация: 28.06.2015
Сообщений: 576
10.11.2015, 15:42
Цитата Сообщение от Faust611 Посмотреть сообщение
PHP
1
$file = fopen("test.csv", "r");
Согласно документации PHP выделяют следующие виды режимов файлов:

r – открытие файла только для чтения.
r+ - открытие файла одновременно на чтение и запись.
w – создание нового пустого файла. Если на момент вызова уже существует такой файл, то он уничтожается.
w+ - аналогичен r+, только если на момент вызова фай такой существует, его содержимое удаляется.
a – открывает существующий файл в режиме записи, при этом указатель сдвигается на последний байт файла (на конец файла).
a+ - открывает файл в режиме чтения и записи при этом указатель сдвигается на последний байт файла (на конец файла). Содержимое файла не удаляется.

Поэтому сначала попробуйте открыть файл для чтения и записи
0
3 / 3 / 0
Регистрация: 16.06.2015
Сообщений: 88
10.11.2015, 15:57  [ТС]
Попробовал,все такая же проблема.При нажатие на кнопку ничего не происходит
0
162 / 161 / 66
Регистрация: 28.06.2015
Сообщений: 576
10.11.2015, 16:50
А что у вас выполняет функция onclick='remove($e)' ?
Асинхронный запрос к обработчику php?

Добавлено через 4 минуты
Я могу предложить такой вариант: В обработчике вы получаете номер строки, считываете весь файл в массив, и потом удаляет n-ый элемент массива, а массив обратно записываете в csv, в режиме w+

Добавлено через 5 минут
На практике это будет выглядеть примерно так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
    $num = $_GET['id']; //Номер строки
    $row = 1;
    $handle = fopen("test.csv", "r");
    
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {  
        $dataMain[] = $data;
    }
    fclose($handle);
 
    unset($dataMain[$num]);
 
    $fp = fopen('test.csv', 'w');
    foreach ($dataMain as $iter) {
        fputcsv($fp, $iter);
    }
    fclose($fp);
Добавлено через 1 минуту
При условии что разделитель у вас ; но тут есть некоторые моменты, например если таблицу будут смотреть несколько человек и несколько нажмут удалить, то будет беда

Добавлено через 7 минут
Ошибся чуть в первом цикле нужно использовать разделитель ,
PHP
1
2
3
4
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {  
        $dataMain[] = $data;
    }
    fclose($handle);
0
3 / 3 / 0
Регистрация: 16.06.2015
Сообщений: 88
10.11.2015, 17:55  [ТС]
функция onclick=remove($e) она как бы присваивает строке номер и потом она должна отослать этот номер функции,а функция уже активирует то что у меня отдельно в remove.php

Добавлено через 35 минут
Я пытаюсь разобраться куда надо вставить ваш пример кода,чтобы понять механику его работы
0
162 / 161 / 66
Регистрация: 28.06.2015
Сообщений: 576
10.11.2015, 18:00
ИМХО я бы лучше тут использовал обычную ссылку. Тем более все равно переадресация на другую страницу. Если уж писать js код, то писать асинхронный в данном случае. Но это лично мое мнение. Попробуйте сделать так:
PHP/HTML
1
echo "<td><a href='remove.php?id='" . $e . "'><button class = 'delete'><b>X</b></button></a></td>";
И подставить мой код в remove.php.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
    $num = $_GET['id']; //Номер строки
    $row = 1;
    $handle = fopen("test.csv", "r");
    
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {  
        $dataMain[] = $data;
    }
    fclose($handle);
 
    unset($dataMain[$num]);
 
    $fp = fopen('test.csv', 'w');
    foreach ($dataMain as $iter) {
        fputcsv($fp, $iter);
    }
    fclose($fp);
Если все будет работать, ищите ошибку в вашем js.

Добавлено через 2 минуты
Цитата Сообщение от Faust611 Посмотреть сообщение
Я пытаюсь разобраться куда надо вставить ваш пример кода,чтобы понять механику его работы
Полностью замените remove.php что проверить работает или нет. Ну и название файла (test.csv) измените на свое.
0
3 / 3 / 0
Регистрация: 16.06.2015
Сообщений: 88
10.11.2015, 20:45  [ТС]
Все заменил.К сожалению не работает.При нажатие на кнопку ничего не происходит

Добавлено через 42 минуты
Как мне кажется функция не передает значения строки в функцию и из-за этого не работает

Добавлено через 1 час 39 минут
а можно ли обратиться к моему файлу не при помощью js?
0
Заблокирован
10.11.2015, 20:52
Цитата Сообщение от Faust611 Посмотреть сообщение
а можно ли обратиться к моему файлу не при помощью js?
можно. скажу даже больше: к вашему файлу нельзя(!) обратиться с помощью js
0
3 / 3 / 0
Регистрация: 16.06.2015
Сообщений: 88
10.11.2015, 21:19  [ТС]
Как так?Мне так преподаватель помог
А как тогда можно обратиться,чтобы он удалил именно нужную строку по нажатию на кнопку?
0
162 / 161 / 66
Регистрация: 28.06.2015
Сообщений: 576
10.11.2015, 23:09
Ладно, сделаем так. Я сейчас постараюсь подробно прокоментировать ваш код, в плане что бы было понятно что он делает, а потом напишу свой, тоже с подробными коментариями, вы посмотрите и разберетесь в чем ваши ошибки.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<link rel="stylesheet" type="text/css" href="style.css">
<script>
      function remove($e)
      {
        //alert('remove.php?id='+n);
          alert("press");
        window.location.replace('remove.php?id='+e);
      }
    </script>
        
    <script>
        function press(){
           
        var newName = prompt();
            //alert(newName);
            alert("press");
             window.location.replace('add.php?id='+newName);
        }
    </script>
    
<?php
$fo = fopen("test.csv", "r"); //Считываем файл в массив $data логично
while (($arr = fgetcsv($fo, 1024, ";")) !== FALSE) {
$data[] = $arr;
} 
 
fclose($fo);
//Рисуем таблицу в цикле
echo "<table>";
foreach ($data as $rgArr){
        echo "<tr>";
 
  
      $count = 0; //Обнуляем count. Зачем?????? У вас всегда срабатывает первая ветка всегда
      if($count == 0)
      { 
       foreach ($rgArr as $nValue){
        echo "<td>{$nValue}</td>";
             
        }
        $count++;
      }
      else //Вот эта ветка у вас никогда не выполниться, потому что в каждой итерации цикла у вас переменная 
      //count обнуляется, соотвественно она всегда равно нулю
      {  
          foreach ($rgArr as $nValue){            
              if($nValue == 0 && is_numeric($nValue)) 
              {
                  echo "<td class=\"red\">{$nValue}</td>";  
              }elseif($nValue > 0 && $nValue < 4 && is_numeric($nValue))
              {
                  echo "<td class=\"green\">{$nValue}</td>";  
              }elseif($nValue > 3 && is_numeric($nValue))
              {
                  echo "<td class=\"blue\">{$nValue}</td>";  
              }else   echo "<td>{$nValue}</td>";
          }
      }
       static $e = 0; //Далее обьявляем статическую перемнную $e и даем ей значение 0 Зачем?? 
          if($e == 0){  // У вас в первой строчке вместо кнопки удалить всегда будет выводиться строка delete
              echo "<td>Delete</td>";
               $e++;
          }    
          else{    //Во всех последующих кнопка удалить   
            echo "<td><button class = 'delete' onclick='remove($e)'><b>X</b></button></td>";
              $e++; //Далее по поводу кнопки удалить, что сейчас тут происходит? Берется чиловое значение $e 
           }        // Отправляется в функцию remove, та в свою очередь переадресует браузер по адресу 
                    // remove.php?id= значение $e.
              echo "</tr>";
    
}
echo "</table>"; 
 
 
echo "<div class='div'><button onclick = 'press()'>Add</button></div>"; // Ну здесь еще как то логически можно обьяснить
// что вы промтом просите пользователя ввести какое то значение и потом его отправляете на страницу add,
// Хотя это можно сделать по другом и проще, но сейчас не об этом.
} ?>
Так теперь мой код:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
error_reporting(E_ALL);
$fo = fopen("test.csv", "r"); //Считываем файл в массив $data
while (($arr = fgetcsv($fo, 1024, ",")) !== FALSE) {
  $data[] = $arr;
} 
//Изначально пусть будет файл csv выглядеть так: разделителем у меня служит запятая
// "Иванов", "Иван", "Иванович"
// "Петров", "Перт", "Петрович"
// "Сидоров", "Сидов", "Сидорович"
 
//Далее рисуем каркас таблицы: 
?>
<table>
  <tr>
    <td>Фамилия</td>
    <td>Имя</td>
    <td>Отчество</td>
  </tr>
<!-- Супер, каркас готов --> 
<?php
//Теперь нужно заполнить таблицу значениями
  foreach ($data as $key => $value) { ?>
    <tr> <!-- Выводим элементы массива на первой итерации цикла $value[0] = Иванов $value[1] = Иван
            $value[2] = Иванович $key = 0. На второй итерации  $value[0] = Петров $value[1] = Перт
            $value[2] = Петрович $key = 1. Ну я думаю понятно. Сколько бы не было записей в файле столько
  и будет строк. -->
      <td><?= $value[0] ?></td> <!-- Запись вида <?= $x ?> равносильна записи <?php echo $x ?> -->
      <td><?= $value[1] ?></td>
      <td><?= $value[2] ?></td>
      <td><a href='remove.php?id=<?= $key ?>'><button class = 'delete'><b>X</b></button></a></td>
      <!-- Кнопка удалить формирует ГЕТ запрос на указаный адрес и передает парамет $id равный номеру текущей строки
      js тут не нужен. В файле remove.php его можно будет взять по ключу $_GET['id'] -->
    </tr>
 <?php } ?>
</table> <!-- Закрываем таблицу. -->
 
<a class='div'>
  <button onclick = 'press()'>
    Add
  </button>
</div> <!-- Добавляем вашу кнопку после таблицы. Вот и все.
Единственно я выводил таблицу посредством html вместо того что бы в echo выводить html код и делать экранирование
0
3 / 3 / 0
Регистрация: 16.06.2015
Сообщений: 88
10.11.2015, 23:49  [ТС]
В принципе я понял где мои ошибки.Осталось дело за малым)

Добавлено через 10 минут
Таблица почему-то некорректно вывелась,но это мой косяк скорее всего
0
162 / 161 / 66
Регистрация: 28.06.2015
Сообщений: 576
11.11.2015, 09:20
Я же вам привел точную правильную отрисовку таблицы, как она может некорректно вывестись? Ну скиньте свой код посмотрим
0
3 / 3 / 0
Регистрация: 16.06.2015
Сообщений: 88
11.11.2015, 12:10  [ТС]
Все работает)Единственно надо мне сделать так чтобы программа сама считала сколько нужно столбцов и строк для таблицы
0
162 / 161 / 66
Регистрация: 28.06.2015
Сообщений: 576
11.11.2015, 13:31
Цитата Сообщение от Faust611 Посмотреть сообщение
программа сама считала сколько нужно столбцов и строк для таблицы
Не очень вас понял, а сейчас как происходит? Вы ж не руками выставляете количество столбцов и строк? Сколько есть у вас в csv файле строк, столько и будет в переменной $key

Добавлено через 24 секунды
И столько столбцов и строк будет в таблице
0
3 / 3 / 0
Регистрация: 16.06.2015
Сообщений: 88
11.11.2015, 14:17  [ТС]
вот ваш код выводит только три столбца,а у меня их 6.Может я конечно что-то неправильно делаю
0
162 / 161 / 66
Регистрация: 28.06.2015
Сообщений: 576
11.11.2015, 15:19
Ну тогда можно сделать так:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
error_reporting(E_ALL);
$fo = fopen("test.csv", "r"); //Считываем файл в массив $data
while (($arr = fgetcsv($fo, 1024, ",")) !== FALSE) {
  $data[] = $arr;
} 
 
 
 
//Изначально пусть будет файл csv выглядеть так: разделителем у меня служит запятая
// "Иванов", "Иван", "Иванович"
// "Петров", "Перт", "Петрович"
// "Сидоров", "Сидов", "Сидорович"
 
//Далее рисуем каркас таблицы: 
?>
<table>
<!--   <tr>
    <td>Фамилия</td>
    <td>Имя</td>
    <td>Отчество</td>
  </tr> -->
<!-- Супер, каркас готов --> 
<?php
//Теперь нужно заполнить таблицу значениями
  foreach ($data as $key => $value) { 
   
    ?>
    <tr> 
    <?php for ($i=0; $i < count($data[$key]); $i++) { ?>
      <td><?= $value[$i] ?> |</td>
    <?php } ?>
 
      <td><a href='remove.php?id=<?= $key ?>'><button class = 'delete'><b>X</b></button></a></td>
      <!-- Кнопка удалить формирует ГЕТ запрос на указаный адрес и передает парамет $id равный номеру текущей строки
      js тут не нужен. В файле remove.php его можно будет взять по ключу $_GET['id'] -->
    </tr>
 <?php } ?>
</table> <!-- Закрываем таблицу. -->
 
<a class='div'>
  <button onclick = 'press()'>
    Add
  </button>
</div> <!-- Добавляем вашу кнопку после таблицы. Вот и все.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.11.2015, 15:19
Помогаю со студенческими работами здесь

Как удалить строку из файла?
Создайте скрипт, который читал бы содержимое текстового файла list.txt и выводил бы ее содержимое в HTML форме с списком флажков перед...

DataGridView не показывает первую строку CSV файла
Читаю данные из CSV (три колонки без заголовка). Вывожу в DataGridView и эта редиска не показывает первуб строку из CSV файла. ...

Как удалить определенную строку из файла?
как удалить определенную строку из файла при нажатии кнопочки?

Как удалить строку из текстового файла?
Как удалить строку из текстового файла ? к примеру sFile = &quot;C:\Temp\system.txt&quot; в файле system.txt первая строка вторя...

Как правильно удалить строку из файла?
void deletez(char db) {data *p; int nomer; readdb(db); ofstream f; f.open(db); cout&lt;&lt;&quot;kakoy nomer udalit?&quot;&lt;&lt;endl; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru