IPB
ЛогинПароль:

> 

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Открыть созданный файл
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Бодрого дня, господа.
Подскажите, пожалуйста. Я никак не найду решения своей задачки.
Суть:
я создаю файл таким вот образом:
var nameFile,ccc : string;
myFile : text;
begin
gotoxy(3,3);
write('Введите название файла: ');
otoxy(58,3);
write('______');
gotoxy(59,3);
readln(nameFile);
nameBasa:=nameFile+'.dat';
gotoxy(3,6);
write('Вы создали файл: ');
textcolor(14);
write(nameFile);
assign (myFile,nameFile);
rewrite(myFile);
readkey;
end.


Как мне теперь его открыть. При условии, что я не знаю, как он называется. Но его имя, по идее, есть в переменной myFile.
Делаю так:

reset(myBasa);
while not eof(myFile) do
begin
readln(myFile,ccc);
writeln(ccc);
end;


, но не работает.
Подскажите - как правильно сделать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Большевик–концептуал
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: octagram@jabber.ru
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

Репутация: -  1  +


Перед Reset тоже нужен Assign


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 479
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


Тип переменной Text, как и file - это обычный record. Среди полей есть и имя файла. И это имя можно прочитать.
Единственно, состав этой структуры не гарантирован в будущих версиях.
https://www.freepascal.org/docs-html/curren…12-2260008.2.14

Как ни странно, сам тип в явном виде описан не в System, а в другом модуле.
Так, для FreePascal
program test;

uses
SysUtils;

var
myFile: Text;
begin
Assign(myFile, 'MyFileName.txt');
rewrite(myFile);
writeln(myFile, 'string');
Close(myFile);

Writeln('file name: ', TextRec(myFile).Name);
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Большевик–концептуал
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: octagram@jabber.ru
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

Репутация: -  1  +


record там с недоделанным ООП.

Замысел в том, что через Text можно работать с принтером (AssignPrn), консолью (AssignCrt) или вообще написать свой обработчик. Хоть с TCP, хоть как. В School Pak, в AnsiFile, например, файлы из ANSI в OEM и обратно на лету перекодируются, так обработчики запрограммированы.

Конкретно System.Assign подготавливает Text к работе с обычным файлом.

Это всё очень похоже на TStream, но TStream, как создан, так уже понятно, как с ним работа будет идти, а Text — это как недоделанный TStream, который после Assign ещё не знает, будет ли он открыт на чтение, на запись или на запись после конца файла.


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Знаток
****

Группа: Пользователи
Сообщений: 479
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


Когда, то "прикручивал" к TurboPascal работу с длинными именами. Помню, что тоже мудрил с этой структурой - делал свой Assign, Reset, Rewrite.

Я и раньше почти не программировал, а сейчас уже и забыл как это. При помощи ООП пробовал силы лишь для простенькой утилиты обработки текстового файла (TStringList). Пробовал читать о TStream и его производных, но так и не понял их преимуществ над обычными file и text. В примерах программ на форумах замена TStream на text ничего не меняла, кроме "чистоты ООП".
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Большевик–концептуал
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: octagram@jabber.ru
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

Репутация: -  1  +


У File как раз нет ООП. Ну, кроме того ООП, что заложено в ядре OS и доступно через THandle.

У Text есть обработчики, и только над Text можно поколдовать, чтоб направить в каком-то необычном направлении. Но Text принципиально текстовый. В древних версиях он ещё состоял из байтов, но Delphi 2009+ и FPC 3.0+ диктуют, что он должен быть Юникодный. То есть, Text — это, скорее, http://docwiki.embarcadero.com/Libraries/R…ses.TTextReader и TTextWriter, два в одном.

А для двоичных данных как раз и есть TStream.

При использовании ООП про конкретную переменную можно знать, что она не просто TStream, а его потомок с дополнительными методами. Например, можно создать TMemoryStream, дать другому модулю записать в него как в абстрактный TStream, а потом, пользуясь этим знанием, узнать размер и подвигать курсором.

У Text нет Seek, и недоделанное ООП не даёт цивилизованного способа недостающие операции добавить.


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Знаток
****

Группа: Пользователи
Сообщений: 479
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


Спасибо.

Как понимаю, применение file и TStream на уровне приверженности к ООП.

Для работы с текстом мне больше понравилось использовать TStringList, чем Text. Но использовал для небольших файлов (менее 1 МиБайт). Понравилось удобство доступа к каждой строке.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Спасибо откликнувшимся. Разобрался.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 22.10.2019 20:36
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name