[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Найти и отредактировать запись в файле
Страницы: 1, 2, 3, 4
walerus
twin
Цитата
Я бы для чистоты эксперимента использовал фискированную длину поля.

Зачем?, если можно использовать "фиксированный" exolode ... я пример выше привел:
twin
Цитата (walerus @ 16.11.2017 - 21:53)
Зачем?, если можно использовать "фиксированный" exolode ... я пример выше привел:
Я же написал - для чистоты эксперимента. Как минимум для того, чтобы препод понял, что я усвоил суть плоских файлов, а значит вник в основы строения СУБД (у них схожи принципы), а не нахватался верхушек с массивами. И мое дальнейшее обучение пойдет в правильном направлении.

В идеале плоский файл не должени содержать ничего кроме данных. Где именно в файле находятся данные, должна знать управляющая система. А это значит, что никаких разделителей там быть не должно. В скрипте, а не в файле, должно быть жестко прописано, что допустим имя находится с 0 по 20 байт строки, фамилия с 21 по 50 и так далее. Если не хватает смиволов, они добиваются заполнителями (в основном пробелами). В идеале получится подобие таблицы, что и есть суть плоский файл:
Вася         Пупкин
Дормидонд Череззаборногузадерищенко
Доздрапема Первомайская


А всё остальное от непонимания сути вопроса. По крайней мере файл с метаданными или разделителями в идеале не может считаться плоским. Он потому и "плоский", что не имеет общей структуры. Если управляющий скрипт её не знает, то он не сможет прочитать плоский файл.

Если испльзуются разделители или метаданные, значит можно говорить о форматах. А это файл уже не плоский, а отформатированный.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
killer8080
Цитата (poorStudent @ 16.11.2017 - 11:08)
killer8080
Почему нет валидации в коде? Есть, форма не отправляется с пустыми полями , и при редактировании предыдущие данные сохранены.

я не увидел в твоем коде никаких проверок, ни на клиентской, ни на серверной стороне. Причем серверная валидация, в отличии от клиентской должна быть обязательно! Это безопсасность и контроль целостности данных, клиентская валидация - это в основном юзабилити.

Цитата (poorStudent @ 16.11.2017 - 11:08)
А почему CSV лучше ?

потому что PHP предоставляет готовый api, тебе не нужно заморачиваться с разделителями и кодировать/декодировать данные. В задании вроде же нет ограничения, какой функционал использовать.



Спустя 4 минуты, 28 секунд killer8080 написал(а):
Цитата (twin @ 17.11.2017 - 04:35)
В идеале плоский файл не должени содержать ничего кроме данных. Где именно в файле находятся данные, должна знать управляющая система. А это значит, что никаких разделителей там быть не должно.

утверждение спорное, wiki говорит иначе
Цитата
Overview[edit]
Plain text files usually contain one record per line,[2] There are different conventions for depicting data. In comma-separated values and delimiter-separated values files, fields can be separated by delimiters such as comma or tab characters. In other cases, each field may have a fixed length; short values may be padded with space characters. Extra formatting may be needed to avoid delimiter collision. More complex solutions are markup languages and programming languages.

так что CSV - разновидность плоского файла
Цитата
Typical examples of flat files are /etc/passwd and /etc/group on Unix-like operating systems.
twin
Цитата (killer8080 @ 17.11.2017 - 07:34)
утверждение спорное, wiki говорит иначе
А я и написал, что спорное.
Цитата (killer8080 @ 17.11.2017 - 07:34)
так что CSV - разновидность плоского файла
И это не вызывает сомнений. Огорчает другое: куда девался рояль "Беккер", как сказал Остап Бендер. smile.gif

Дело в том, что, как я говорил, привнесение внутрь файла некоторых правил, это форматирование. Тот же CSV предполагает не только разделители, но и экранирование. Для того, чтобы работать с форматом CSV нужно обязательно юзать эти правила.

А вот это (форматирование) и есть камень преткновения. В CSV априори в качестве разделителя или экранирующего символа могут применяться любые символы. И это сильно усложняет переносимость данных между устройствами, не смотря даже на то, что будет указано расширение. Кстати, оно само по себе накладывает некоторые обязательства, что тоже не совсем корректно при переносах.

Потому приверженцы "чистой теории" считают плоскими только те файлы, которые не содержат ничего, кроме данных.

Я к чему все это. Не собираюсь спорить, что лучше, а что хуже (на самом деле всему свое место), но в данном случае позиция с фиксированными полями беспроигршна, так как не понятно, какой точки зрения придерживается преподаватель TC. Но если он приемлит разделители, он приемлит и этот вариант. А если нет... Мало ли. Потому и написал, что "для чистоты эксперимента".

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
killer8080
Цитата (twin @ 17.11.2017 - 13:13)
так как не понятно, какой точки зрения придерживается преподаватель TC.

Цитата (poorStudent @ 10.11.2017 - 22:54)
Файл я правильно использовала, уточнила в колледже.

видимо файл с разделителями устраивает unsure.gif
twin
Цитата (killer8080 @ 17.11.2017 - 09:31)
видимо файл с разделителями устраивает
Ну и хорошо, это конечно проще, заюзать CSV, собственно для того он и. smile.gif
Правда если бы я был преподом, я бы заставил для начала уяснить, как работать без разделителей. Это помогло бы потом усвоить, для чего в СУБД размеры полей.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
poorStudent
Цитата (twin @ 17.11.2017 - 13:34)
Цитата (killer8080 @ 17.11.2017 - 09:31)
видимо файл с разделителями устраивает
Ну и хорошо, это конечно проще, заюзать CSV, собственно для того он и. smile.gif
Правда если бы я был преподом, я бы заставил для начала уяснить, как работать без разделителей. Это помогло бы потом усвоить, для чего в СУБД размеры полей.

А препод мож и заставит)) они бастуют у нас, уже 5 недель, на след неделе вроде как начинаем снова учиться, он как раз и скажет , что хочет от нас.

Про валидацию я не пойму - чего я не сделала? Форма пустая не сабмитится , при редактировании старые данные показываются в форме. Или речь про другую какую-то валидацию?
killer8080
Цитата (poorStudent @ 18.11.2017 - 10:57)
Про валидацию я не пойму - чего я не сделала? Форма пустая не сабмитится , при редактировании старые данные показываются в форме.

при редактировании валидации нет, собственно как и самого редактирования biggrin.gif
редактируемые данные выводятся в форму, параллельно удаляясь из файла, если форму не засабмитить, запись будет потеряна.
код
Цитата (poorStudent @ 11.11.2017 - 00:40)
function modify()
{
    $errors=array();
    $errors[0]='';
    $errors[1]='';
    $errors[2]='';
    $contacts = file("myFile.txt");
    $fp = fopen("myFile.txt", "w");
    foreach ($contacts as $contact) {
        $contact = rtrim($contact);
        $row = explode(';', $contact);
        $fnsearch = $row[1];
        $lnsearch = $row[2];

        if (($fnsearch == @$_REQUEST['fnsearch']) && ($lnsearch == @$_REQUEST['lnsearch'])) {

            addForm($row[0], $row[1], $row[2], $row[3], $row[4], $row[5], $row[6], $row[7], $row[8], $row[9], $row[10], $errors);

        } else {
            fwrite($fp, $contact.PHP_EOL);
        }
    }
    fclose($fp);
}

Цитата (poorStudent @ 11.11.2017 - 00:49)
elseif($choice=="modify"){
modify();}
poorStudent
Цитата (killer8080 @ 19.11.2017 - 00:32)
Цитата (poorStudent @ 18.11.2017 - 10:57)
Про валидацию я не пойму - чего я не сделала? Форма пустая не сабмитится , при редактировании старые данные показываются в форме.

при редактировании валидации нет, собственно как и самого редактирования biggrin.gif
редактируемые данные выводятся в форму, параллельно удаляясь из файла, если форму не засабмитить, запись будет потеряна.
код
Цитата (poorStudent @ 11.11.2017 - 00:40)
function modify()
{
    $errors=array();
    $errors[0]='';
    $errors[1]='';
    $errors[2]='';
    $contacts = file("myFile.txt");
    $fp = fopen("myFile.txt", "w");
    foreach ($contacts as $contact) {
        $contact = rtrim($contact);
        $row = explode(';', $contact);
        $fnsearch = $row[1];
        $lnsearch = $row[2];

        if (($fnsearch == @$_REQUEST['fnsearch']) && ($lnsearch == @$_REQUEST['lnsearch'])) {

            addForm($row[0], $row[1], $row[2], $row[3], $row[4], $row[5], $row[6], $row[7], $row[8], $row[9], $row[10], $errors);

        } else {
            fwrite($fp, $contact.PHP_EOL);
        }
    }
    fclose($fp);
}

Цитата (poorStudent @ 11.11.2017 - 00:49)
elseif($choice=="modify"){
modify();}

Все, поняла)) Я даже не подумала о том, сохранится ли контакт если не не отредактировать его. А как исправить?
killer8080
Цитата (poorStudent @ 19.11.2017 - 07:49)
Все, поняла)) Я даже не подумала о том, сохранится ли контакт если не не отредактировать его. А как исправить?

логику менять, файл модифицировать после сабмита формы редактирования., а не при выводе формы.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.