Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Что такое Файл?

44K
25 мая 2010 года
FeelUs
57 / / 10.05.2010
Я себе его представлял просто, как массив байтов, имеющий определенную длину, название и адрес.
Но если создать файл в блокноте в формате юникод, то даже если менять его расширение, и блокнот и far как-то понимают что это юникод и автоматически спаривают байты в слова(word), хотя при просмотре в far'е шестнадцетиричного его кода - все такой же массив байтов.
А если на паскале написать простейшую программку, чтобы читала из этого файла и выводила на экран 1-ю строку(string), то она каждый байт расшифровывает одельно.
Можно ли, и если да то как, написать программку, чтобы она понимала такие особенности?
:rolleyes:
5
25 мая 2010 года
hardcase
4.5K / / 09.08.2005
Файл - это именованая последовательность байт.
Означенные выше программы читают несколько начальных килобайтов файла и пытаются понять (работает некоторая эвристика) его формат, в зависимости от определенного формата выбирается представление.
44K
25 мая 2010 года
FeelUs
57 / / 10.05.2010
реальная длина файла - 884 байта(442 символа юникода),
а программа на паскале:

assign(f,'...имя файла...');
reset(f);
c:=0;
repeat
read(f,ch);
inc(c);
until eof(f);

(где f:text; c:word; ch:char; )
в итоге выдает длину файла(переменная с) 58(байт)

С чем Это связано?
5
25 мая 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: FeelUs
реальная длина файла - 884 байта(442 символа юникода),
а программа на паскале:

assign(f,'...имя файла...');
reset(f);
c:=0;
repeat
read(f,ch);
inc(c);
until eof(f);

(где f:text; c:word; ch:char; )
в итоге выдает длину файла(переменная с) 58(байт)

С чем Это связано?

Вероятно с тем, что паскаль не понимает уникод. Во всяком случае такой подход к подсчету символов не корректен.

44K
26 мая 2010 года
FeelUs
57 / / 10.05.2010
если файл - это именованная последовательность байт,
и юникод на это ни как повлиять не может,
почему паскаль считает, что после 58-го байта наступает конец файла, когда его реальная длина 884 байта:confused:
5
26 мая 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: FeelUs
если файл - это именованная последовательность байт,
и юникод на это ни как повлиять не может,
почему паскаль считает, что после 58-го байта наступает конец файла, когда его реальная длина 884 байта:confused:

Еще как может. Вы объявили f как text, а Паскаль (кстати, вы не сказали какой) не понимает уникод.

297
26 мая 2010 года
koodeer
1.2K / / 02.05.2009
Если не ошибаюсь, значение символа EOF, означающего в Паскале конец файла, кодируется числом 26. Таким образом в текстах, с которыми работает Паскаль, не может быть символа с таким кодом. В ASCII символы с кодами до 31 являются управляющими.

В Юникоде же значение одного из байтов символа запросто может быть 26. Например, последовательность из двух байтов со значениями 4 и 26 означает русскую заглавную букву "К".
44K
26 мая 2010 года
FeelUs
57 / / 10.05.2010
получается:[INDENT]с точки зрения паскаля[/INDENT][INDENT][INDENT]файл - последовательность байтов, заканчивающаяся символом 1Ah,[/INDENT][/INDENT][INDENT]а с точки зрения всего остального[/INDENT][INDENT][INDENT]файл - последовательность байтов, заданной длины, где длина хранится в некотором атрибуте файла[/INDENT][/INDENT]
- так чтоли:),

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

а насчет юникода я понимаю так:[INDENT]если он влияет на файл,[/INDENT][INDENT][INDENT]то в нем должен быть еще какой-то атрибут, в котором записано, юникод это или не юникод[/INDENT][/INDENT][INDENT]а если не влияет, то программы понимают, что это юникод, эвристически[/INDENT]
44K
26 мая 2010 года
FeelUs
57 / / 10.05.2010
еще я заметил, что в юникоде первые два байта не интерпритируются как символ, и равны FEFFh, или FFh FEh(младший байт по младшему адресу)
7
26 мая 2010 года
@pixo $oft
3.4K / / 20.09.2006
Unicode на файл не влияет:)
А атрибут бывает.Иногда.В таких случаях файл начинается символами "яю"(вроде)
44K
26 мая 2010 года
FeelUs
57 / / 10.05.2010
он оказался прост:
если файл объявить как file of byte, то в итоге получается ральная длина файла
14
27 мая 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: FeelUs
получается:
с точки зрения паскаля
файл - последовательность байтов, заканчивающаяся символом 1Ah,
а с точки зрения всего остального


Нет, с т.з. паскаля text - файл с последовательностью байтов, заканчивающихся символом 1Ah или концом файла

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог