С Новым годом! Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648

Запись и чтение из текстового файла

07.06.2020, 17:08. Показов 6330. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте.

Подскажите пожалуйста самый короткий и простой способ записать в текстовый файл 'asdf.txt' целое число, например 12345.
Предыдущее содержимое файла, если он существует должно уничтожаться. Дописывать в конец ничего не надо. Если файл не существует, он должен быть создан автоматически. Как считать это число из файла в интовую паеременную n?
Не хотелось бы для такой малой задачи морочиться с потоками.

Добавлено через 5 минут
например, можно так:
Pascal
1
s:= LoadFromFile('asdf.txt'); // s - String
а сохранять как?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.06.2020, 17:08
Ответы с готовыми решениями:

Динамические массивы и чтение/запись текстового файла
Здравствуйте. Имеется входной текстовый файл InputFile.txt. В нем задаётся система: матрица A (nxn) и к ней слева дописывается правая...

Чтение, запись и обработка текстового файла средствами компонента Memo
Выяснить есть в каждой строке файла буквы для слова “month”. Результат поместить в новый файл в виде: “1” - true; “2” - false; и т.д. ...

Чтение и запись текстового файла
Проблема в том, что написала самый обычный, самый стандартный код для чтения и записи текстового файла. Во-первых он всегда мне пишет...

17
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33369 / 21495 / 8234
Регистрация: 22.10.2011
Сообщений: 36,892
Записей в блоге: 12
07.06.2020, 17:27
Нет loadfromfile, который читает строку. Есть readfiletostring

А чтобы записать - либо конвертировать в строку, запихивать в stringlist, и сохранять, либо использовать древние textfile.
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
07.06.2020, 17:51  [ТС]
volvo, чтение работает:
Pascal
1
s:= ReadFileToString('proba.txt');
а вот для записи функцию в FileUtil не вижу.
0
07.06.2020, 17:55

Не по теме:

Трудно увидеть черную кошку в темной комнате. Особенно если ее там нет.

0
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
07.06.2020, 18:38  [ТС]
volvo, для записи самый короткий вариант видимо такой:
Pascal
1
2
3
4
5
6
7
8
9
var s: String;
    f: TextFile;
begin
    s:= '2277';
    AssignFile(f,'proba.txt');
    Rewrite(f);
    writeln(f, s);
    CloseFile(f); 
end;
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,355
Записей в блоге: 3
07.06.2020, 19:03
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
var s: String;
begin
  s := '2277';
  with TStringList.Create do
    begin
      Add(s);
      SaveToFile('proba.txt');
      Free;
    end;
end;
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
07.06.2020, 19:15  [ТС]
D1973, а чем хуже вариант без создания стринг листа?

Добавлено через 1 минуту
Цитата Сообщение от D1973 Посмотреть сообщение
Free;
зачем?
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
07.06.2020, 19:18
Цитата Сообщение от jkrnd Посмотреть сообщение
Free;
зачем?
Намусорил - убери за собой.
0
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
07.06.2020, 19:19  [ТС]
northener, разве в блоке With это не делается автоматом?
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
07.06.2020, 19:26
В блоке With ничего не делается автоматом.

Добавлено через 1 минуту
Единственно лучше написать так
Pascal
1
2
3
4
5
6
7
  with TStringList.Create do
    try
      Add(s);
      SaveToFile('proba.txt');
    finally
      Free;
    end;
1
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,355
Записей в блоге: 3
07.06.2020, 19:42
Цитата Сообщение от northener Посмотреть сообщение
лучше написать так
Да, чтобы при любом раскладе память была очищена...
Цитата Сообщение от jkrnd Посмотреть сообщение
чем хуже вариант без создания стринг листа?
Да не хуже, просто СтрингЛист имеет гораздо больше плюшек... Ну, хотя бы тто, что позволяет сохранять файл в указанной кодировке...

Добавлено через 4 минуты
Цитата Сообщение от jkrnd Посмотреть сообщение
зачем?
Цитата Сообщение от jkrnd Посмотреть сообщение
разве в блоке With это не делается автоматом?
Ну, как бы, Дельфи (и, скорее всего, Лазарус тоже) умеет "прибирать за собой"... Но целиком и полностью полагаться на это, таки не стоит... И если даже мы не объявили переменную-ссылку на область памяти, занятую объектом - мы ее все равно заняли. А раз заняли, то попользовались и очистили. Это лучше и надежнее, прямо как Тарас Бульба: "Я тебя породил - я тебя и убью..."
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33369 / 21495 / 8234
Регистрация: 22.10.2011
Сообщений: 36,892
Записей в блоге: 12
07.06.2020, 20:13
Лучше вот так:
Pascal
1
2
3
4
5
6
7
  with TStringList.Create do
    try
      Text := s; // На кой что-то добавлять, если надо просто записать текст
      SaveToFile('proba.txt');
    finally
      Free;
    end;
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
08.06.2020, 03:57
Короче говоря мы общими усилиями сделали рыбу для процедуры WriteStringToFile, которую не хило бы иметь в LCL, раз уж там есть ReadFileToString.

Добавлено через 7 минут
Только не говорите мне, что эта рыба давно протухла, ибо весь её код известен уже лет эдак 25.
1
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,381
08.06.2020, 17:13
Цитата Сообщение от D1973 Посмотреть сообщение
Да не хуже, просто СтрингЛист имеет гораздо больше плюшек... Ну, хотя бы тто, что позволяет сохранять файл в указанной кодировке...
кодировка особенно важна, когда нужно
Цитата Сообщение от jkrnd Посмотреть сообщение
записать в текстовый файл 'asdf.txt' целое число, например 12345.


Добавлено через 1 минуту
Цитата Сообщение от northener Посмотреть сообщение
Короче говоря мы общими усилиями сделали рыбу для процедуры WriteStringToFile, которую не хило бы иметь в LCL, раз уж там есть ReadFileToString.
и где логика авторов? Чтение кому-то понадобилось, а запись - нет?
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,355
Записей в блоге: 3
08.06.2020, 17:20
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
кодировка особенно важна
Ну, далеко не всегда в текстовый файл пишутся только цифры, правда?
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,381
08.06.2020, 17:29
D1973, ну здесь автор хочет записать целое число в текстовый файл, верно?

Добавлено через 1 минуту
я не понял, чем вариант jkrnd из сообщения #5 не подошёл?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33369 / 21495 / 8234
Регистрация: 22.10.2011
Сообщений: 36,892
Записей в блоге: 12
08.06.2020, 18:18
Цитата Сообщение от northener Посмотреть сообщение
весь её код известен уже лет эдак 25
Плохо известен тебе ее код. Открой исходники и посмотри, как реализуется в Лазарусе ReadFileToString. Это раньше, лет 15 назад оно было через TStringList. Потом появилось описание бага в багтрекере, и код поправили с использованием TStringListUTF8. Но теперь все напрочь переписали, и ничего общего с этой "рыбой" там нет. Файл открывается через FileOpenUTF8, и читается через FileRead. Так что если уж делать по принципу "раз есть чтение - сделаем и запись" - то надо делать запись аналогичными функциями с теми, которыми делается чтение.

Добавлено через 4 минуты
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
чем вариант jkrnd из сообщения #5 не подошёл?
Меня лично такой вариант не устраивает именно невозможностью работать с кодировками. Ибо коли ты работаешь с текстовым файлом - то и писать туда придется строку. Для строки главное - кодировка. Это сегодня ТС хочет записать представление целого числа. А завтра захочет записать какой-нибудь текст кириллицей, и прощай читаемый файл в результате.

Так что, если писать свою функцию WriteStringToFile, то обязательно еще одним параметром я бы передавал кодировку, в которой писать данные в файл. Пускай там будет значение по умолчанию = UTF8, и можно будет его изменить.
0
09.06.2020, 03:39

Не по теме:

Цитата Сообщение от volvo Посмотреть сообщение
Плохо известен тебе ее код.
Ну я вообще-то имел в виду несуществующую WriteStringToFile и тот код, который тут предложен для записи строки в файл вызовом одной процедуры/функции. Он действительно известен уже очень давно. Главное в моем высказывание то, что процедура чтения файла в строку в LCL есть, а процедуры записи строки в файл нет.
Я понимаю почему её до сих пор нет. Просто никому из разработчиков она не понадобилась. При этом не совсем понимаю кому из разработчиков и для чего так уж очень понадобилась ReadFileToString.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.06.2020, 03:39
Помогаю со студенческими работами здесь

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

Чтение текстового файла и запись
Здравствуйте! помогите разобраться, у меня огромный текстовый файл, в начале содержит текстовые данные, а потом в основном числовые. Мне...

Чтение и запись текстового файла
Сделал небольшую программу, которая должна построчно читать файл и немного редактировать его: Менять китайский на текст между...

Чтение и запись текстового файла в TP
Как открыть текстовый файл в TP и в нём вносить изменения в файл и сохранить их?

Создание/Запись/чтение текстового файла
Вообщем мне нужно... чтобы при нажатии на кнопку создавался текстовый файл и чтобы в него записывался текст из строки EDIT Чтобы при...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru