|
1 / 1 / 0
Регистрация: 06.03.2024
Сообщений: 117
|
||||||
Найти строку в файле, и если нет, то добавить новую13.10.2025, 22:38. Показов 1327. Ответов 10
Метки нет (Все метки)
Здравствуйте уважаемые специалисты.
В файле $file = "db/list"; нужно найти строку $_POST['walletnumber'] = trim($_POST['walletnumber']); и если такая строка не найдена, то добавить новую. Вот код:
- если файл пустой, то совсем ничего не добавляется; - если файл не пустой, то строка добавляется в любом случае, если даже такая строка в файле уже существует; Пожалуйста, поправьте меня, что я делаю не так?
0
|
||||||
| 13.10.2025, 22:38 | |
|
Ответы с готовыми решениями:
10
Дана строка. Если она представляет собой запись целого числа, то вывести 1; если вещественного (с дробной частью), то вывести 2; если строку нельзя
|
| 13.10.2025, 23:06 | |
|
Так попробуйте прочитать текущий код "по русски"
1. Входим в цикл по строкам 2. Если в текущей строке не содержится значение параметра walletnumber то дописываем строку 3. По выходу из цикла (если количество элементов изменилось) то полностью перезаписываем файл массивом Наводящие вопросы: 1 не замечаете в том алгоритме что я озвучил не состыковок? 2. в какой момент времени может измениться массив в принципе (где вы в него что либо добавляете)? 3. Если в файле нет ни одной записи, какая строка должна записать нужное в файл? 4. Условие проверки (предположим все остальное кроме условия вы исправили): что будет если мы сначала записали Apple а потом app. 5. Зачем вам strstr вам разве нужно знать часть строки начиная с заданной ведь если вам нужно знать входит ли введенная строка в считанную есть более подходящая функция. Не говоря уж, что озвученное над кодом условие вообще другое
2
|
|
|
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
|
||||||||||||||
| 14.10.2025, 13:01 | ||||||||||||||
Сообщение было отмечено Kuzma92 как решение
Решение
А вам нужно сначала обойти весь массив целиком, и только потом делать какие-то выводы. Для этого можно добавить отдельную переменную-флаг.
1
|
||||||||||||||
|
1 / 1 / 0
Регистрация: 06.03.2024
Сообщений: 117
|
||||||
| 14.10.2025, 14:41 [ТС] | ||||||
|
sad67man, спасибо вам за развернутый ответ. Увидел свои ошибки, понял как должно быть правильно.
voral, вам спасибо за наводящие вопросы. Постарался во всем разобраться. В силу своих знаний, сделал вот так:
0
|
||||||
|
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
|
||||||||
| 14.10.2025, 16:22 | ||||||||
|
2) Если файл огромный, то может не хватить памяти, чтоб его содержимое загнать в переменную. В этом случае построчное чтение выгоднее, но в таком случае и функция file() тоже не подойдет. 3)
1
|
||||||||
|
1 / 1 / 0
Регистрация: 06.03.2024
Сообщений: 117
|
|
| 14.10.2025, 21:20 [ТС] | |
|
sad67man, всё наконец-то, до меня дошло, как до жирафа правда)) Теперь в этом моменте полностью разобрался и буду знать. Спасибо вам огромное за помощь, уделенное время, и главное за полезную для меня информацию.
0
|
|
| 15.10.2025, 07:51 | ||||||||||||||||||||||||||||||||
|
Ну я бы все же проверил условие на соответствие исходной задачи. вы либо условия в начале топика описали не верные либо у вас не верное условие
пользователь введет первый раз c пробелом в конце, а второй раз без пробелом - строки будет две. (а если в другой последовательности - то одна) пользователь введет первый раз строку с переносом строки, а второй раз с без - строки будет три!. (а ввести так может легко. например он значение скопирует через буфер обмена из файлика открытого в текстовом редакторе и захватит переносы) Порядок ломающий логику будет воспроизводиться наоборот если поменять параметры местами в функции strpos - но суть одна Т.е. полагаю стоит "нормализовать" полученное значение. И, кстати, вы поступили правильно что завели до цикла переменную add (только название придумали не логичное. а если не надо добавлять ? ).Кроме того, уже зависит от вашей задачи. Я так понимаю речь идет о номерах кошельков. Если там могут быть буквы, то пользователь может один раз ввести заглавными буквами (или в разнобой) а во второй раз все маленькими... И у вас будут две записи. Если регистр в реальности не имеет значение - необходимо приводить к единому. Далее поговорим об условии. strpos($list, $add) Это поиск строки в подстроке. отсюда: если сначала будет передано app а потом apple - будет только одна строка. Это точно то, что вам нужно? Если да - ок. (кстати в php 8 есть более "правильная" функция str_contains) Если мы тут видим весь код и к скрипту будет обращение пустое - без переданого параметра или с пустым значением - будет добавляться пустая строка - каждый раз. Далее строка
надо либо
На уровне "микрооптимизаций" (или даже нано-) я обычно стараюсь избегать лишних (не нужных по логике) инверсий булевых значений. т.е. !isFind лишнее я бы сделал обратную переменную. но это конечно мелочиТак же я бы разложил на функции. Просто чтобы алгоритм стал более очевидным. в данном случае выделил бы определение надо ли производить запись. Т.е. чтобы был виден отдельно "общий алгоритм" и не мешался при взгляде с алгоритмом принятия решения о записи. Но это уже дело вкуса - можно и вынести из функции Так же хорошо бы добавить проверку наличия файла иначе у вас скрипт упадет с ошибкой Т.е. с учетом вышесказанного (если у вас старая версия PHP без типизации - просто уберите типы из сигнатуры функции)
Добавлено через 10 секунд
Забыл еще один момент. Ведь параметр может быть и не передан. Предусмотрим и это (для php 7.4+) добавим значение по умолчанию(??'')
0
|
||||||||||||||||||||||||||||||||
|
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
|
|||||||
| 15.10.2025, 10:45 | |||||||
0
|
|||||||
| 15.10.2025, 11:13 | ||||||||
![]() По большому счету тут правильно и чтение файла убрать в needSave т.к. условие записи "отсутствует запись в файле" ) в общем (оставаясь в фукнционале можно и так)
0
|
||||||||
|
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
|
||
| 15.10.2025, 12:35 | ||
|
0
|
||
|
3 / 3 / 0
Регистрация: 19.10.2025
Сообщений: 65
|
||
| 20.10.2025, 12:34 | ||
|
0
|
||
| 20.10.2025, 12:34 | |
|
Помогаю со студенческими работами здесь
11
Если $i делится на 2 то выделяем строку цветом aqua, а если на 3 - то курсивом Дана строка. Если она представляет собой запись целого числа, то вывести 1; если вещественного (с дробной частью), то вывести 2 Добавить в начале каждой новой строки текст Как можно одним запросом редактировать предыдущую строку и добавить новый? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает
Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|