|
0 / 0 / 0
Регистрация: 02.12.2020
Сообщений: 135
|
||||||
Работа с файлами10.11.2021, 22:40. Показов 1113. Ответов 14
Метки нет (Все метки)
Здравствуйте!
Помогите, пожалуйста, найти и исправить мои ошибки в коде (заменить на корректные, добавить, убрать неправильно используемые функции в моем решении). Задание: Составить таблицу в файле, а потом вывести ее на экран. В первой процедуре вывести заголовок таблицы. Во второй рассчитать данные таблицы для первой строки. В третьей рассчитать данные для второй строки и т. д.. В последней процедуре вывести получившуюся таблицу из файла на экран. Первая процедура (создание файла (или обнуление старых данных файла) и вывод заголовка таблицы в файл): Сначала с помощью функции assign(f, 'c:\file.txt') я создаю файл, потом с помощью функции rewrite(f) обнуляю его содержимое и начинаю заполнять новыми данными - write(), затем закрываю файл - close(f); Вторая процедура (расчет данных и добавление результатов в таблицу, находящуюся в файле): Сначала открываю файл - assign(f, 'c:\file.txt'), потом добавляю в файл новые данные - write(f), затем закрываю файл - close(f); С третьей и до предпоследней процедуры: аналогично второй; Последняя процедура (вывод получившейся таблицы из файла на экран): Сначала открываю файл - assign(f, 'c:\file.txt'), потом перевожу его в режим чтения - reset(f), затем считываю все данные из файла read(f, а), затем вывожу их (таблицу на экран) - writeln(а) и закрываю файл - close(f). Примерный вид программы:
0
|
||||||
| 10.11.2021, 22:40 | |
|
Ответы с готовыми решениями:
14
Работа со списками и файлами (Двусвязный список, структуры, работа с файлами) Работа с файлами , хотелось бы с windows system файлами Работа с строками,Работа со структурными типами данных,Работа с файлами!! |
|
0 / 0 / 0
Регистрация: 02.12.2020
Сообщений: 135
|
||
| 10.11.2021, 23:48 [ТС] | ||
|
Из того, что Вы написали, я понял: 1. Файл надо открыть в первой программе, а закрыть в предпоследней (предполагаю). 2. Перепутал порядок #13 и #10.
0
|
||
|
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
|
|
| 11.11.2021, 05:00 | |
|
Maks Smirnov, для создания текстового файла служит rewrite, а для открытия для добавления append
Но это для текстовых… А для file of char нужно переписывать файл заново! … либо достигать конца файла и только тогда начинать в него писать. Вообще, вы выбрали странный способ. Зачем каждый раз писать assign(f, 'c:\file.txt'); У вас переменная f глобальная, значит можно один раз в начале основной программы связать её с файлом и всё!
1
|
|
|
Модератор
|
|
| 11.11.2021, 09:08 | |
|
Это хорошо, что вы описываете, что именно поняли из прочитанного. Плохо, что мне не удалось донести мысль кратким способом
![]() Попробуем заменить WriteLn(f, нечто) словесным описанием того, что, как надеялся, должно было стать понятно. 1) в Паскале есть встроенные процедуры Write и WriteLn. Вторая отличается от первой тем, что дописывает после всего выведеного перевод на новую строку. Поэтому вместо Write(нечто, #13#10) обычно лучше писать WriteLn(нечто). 2) процедуры Write/WriteLn, если их первым параметром является не файловая переменная, выводят в файл "стандартного вывода". Если почитать про синтаксис старые описания языка, заметите, что эти файлы указывалисьв в описании заголовка программы (и достаточно давно такое указание ещё было обязательным) program имя(input, output); Но это я немного отвлёкся. То есть, Write(нечто) и WriteLn(нечто) на самом деле являются вызовами Write(output, нечто) и WriteLn(output, нечто). У вас же при выводе в файл, а из задания следует, что процедуры должны выводить именно в файл, пропущена файловая переменная f, поэтому вывод будет не в файл f, а в файл стандартного вывода, который обычно связан с экранным вводом/выводом. Все вот это мне было лень писать в прошлый раз, понадеялся, что все это станет очевидным пытливому уму из емкого: WriteLn(f, ...); Добавлено через 3 минуты Про переоткрытие файла мысль раскрыл выше JuriiMW, не буду повторяться. Добавлено через 6 минут Про открытие закрытие: - связать файловую переменную с файлом в начале программы или в отдельной процедуре, - открыть файл в начале программы или в помянутой выше процедуре, - закрыть файл в конце программы. Стратегия открыть-записать-закрыть-повторить тоже используется, но в других случаях, например, при записи журналов/протоколов работы.
1
|
|
|
0 / 0 / 0
Регистрация: 02.12.2020
Сообщений: 135
|
||||||
| 11.11.2021, 13:56 [ТС] | ||||||
|
На данный момент мой код имеет такой вид:
1. поменял write(#13#10) на writeln; 2. изменил тип файла с символьного на текстовый - file of char -> text; 3. поменял тип переменной, которая выводит данные из файла на экран - char -> string; 4. сделал вещественное число типом string, чтобы вывести его в файл; 5. закрытия и открытия файла я решил оставить. В программе, которую я делаю, я считаю их необходимыми. Если их можно оставить, а я так понял, что это можно сделать, я воспользуюсь этой возможностью. Соответственно ввел в программу функцию - append(f); 6. функцию assign(f, 'c:\file.txt') вывел в основную программу. Но у меня не исчезла проблема с тем, что вводимые мной слова и преобразованные вещественные числа имеют тип string, а функция вывода в файл требует тип char. JuriiMW, bormant, подскажите, пожалуйста, что еще нужно поправить, чтобы вывод стал корректным?
0
|
||||||
|
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
|
||||||||||||
| 11.11.2021, 16:32 | ||||||||||||
|
Если уж вы писали форматный вывод, то и здесь бы прокатило: writeln(f,c:0:2);Первое приближение:
1
|
||||||||||||
|
Модератор
|
||||||||||||||
| 11.11.2021, 16:33 | ||||||||||||||
1
|
||||||||||||||
|
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
|
|
| 11.11.2021, 16:35 | |
|
bormant, упс!
Я раньше выложил решение… Соррян ;–)
0
|
|
|
0 / 0 / 0
Регистрация: 02.12.2020
Сообщений: 135
|
|
| 11.11.2021, 16:58 [ТС] | |
|
JuriiMW, спасибо за редактирование кода.
bormant, спасибо за дополнительные пояснения. Код работает, но появилась проблема - кодировка. У меня в среде программирования Lazarus настроена кодировка CP866. JuriiMW, bormant cкажите, пожалуйста, на какую кодировку надо поменять, чтобы слова отображались корректно?
0
|
|
|
0 / 0 / 0
Регистрация: 02.12.2020
Сообщений: 135
|
|
| 11.11.2021, 17:26 [ТС] | |
|
Нашел - CP1251.
Добавлено через 27 минут Корректную кодировку для файла я нашел, но слова, которые появляются на экране пользователя до использования файла, исказились - им кодировка CP1251 не подходит. Получается, что для слов выводимых на экран пользователя напрямую корректна кодировка CP866, а для слов, попадающих на экран пользователя через файл CP1251. JuriiMW, bormant, может можно как-то запрограммировать кодировку вводимых в файл слов? Корректно или некорректно отображаются слова в файле мне не важно - он используется как хранилище информации, чтобы при вызове пользователем определенной процедуры, вывести всю информацию на экран, где информация должна быть отображена корректно.
0
|
|
|
Модератор
|
|
| 11.11.2021, 17:35 | |
|
1
|
|
|
0 / 0 / 0
Регистрация: 02.12.2020
Сообщений: 135
|
|||||||||||
| 11.11.2021, 18:19 [ТС] | |||||||||||
|
bormant, я так понял, что в моем случае, чтобы использовать Вашу функцию и не переделывать ее, мне нужно применить ее для слов, выводимых на экран пользователя до использования файла, кодировкой которых является CP866?
Ваша функция:
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 02.12.2020
Сообщений: 135
|
|||||||||||
| 11.11.2021, 18:27 [ТС] | |||||||||||
|
Строка -
0
|
|||||||||||
|
Модератор
|
||||||||||||
| 11.11.2021, 20:04 | ||||||||||||
|
Добавлено через 11 минут
Но это так, необходимый минимум, на самом деле там несколько больше общих (присутствующих в обеих таблицах) символов, потому в том сообщении не только пример функции cp866to1251, но и ссылки какие-то, и буквы в виде слов, построенные в предложения таким образом, чтобы получился осмысленный текст. Добавлено через 52 минуты Ну и на случай непонятной кодировки исходника такой же независимый (и такой же неполноценный) вариант для 866->1251:
1
|
||||||||||||
| 11.11.2021, 20:04 | |
|
Помогаю со студенческими работами здесь
15
Работа с файлами. Работа со структурами и файлами Си Работа с файлами(Запись,чтение,работа с данными) Лабораторная работа №5. Работа с файлами и алгоритмы сортировки Работа с файлами и строками, работа с двумерными массивами
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла:
Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
|
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
|