Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2014, 19:21   #1
mahatmaQL
Пользователь
 
Регистрация: 02.04.2014
Сообщений: 18
По умолчанию shortstring не считывает 255 символов

Подскажите, в чем может быть причина, что при считывании из типизированного файла, состоящего из строк длиной 65 байт, переменная string[65] считывает только 36 байт. Увеличение до string[255] тоже дает строку только в 36 байт.

Если открывать тот же файл, но как textfile и считывать из него построчно переменную типа string, читается строка в 65 байт.
mahatmaQL вне форума Ответить с цитированием
Старый 12.04.2014, 19:26   #2
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

код в студию, чтение из типизированного файла
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 12.04.2014, 19:48   #3
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Наверное, используется Unicode, а файл в ANSI.
Somebody вне форума Ответить с цитированием
Старый 12.04.2014, 21:03   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
Наверное, используется Unicode, а файл в ANSI.
Какой может быть юникод в типе string[65]?
northener вне форума Ответить с цитированием
Старый 12.04.2014, 21:58   #5
mahatmaQL
Пользователь
 
Регистрация: 02.04.2014
Сообщений: 18
По умолчанию

Somebody, northener,
спасибо за участие в вопросе!

Проблема была в неправильном назначении типа string[65]. Строка длиной 65 байт - это строка длиной 65 байт. А string[65] - строка, у которой индекс 0=65, а с 1 по 66 - собственно сама строка.
В моем случае нулевой индекс строки='$'. Ord('$')=36. Вот и получалось, что считывалось только 36 символов.

Последний раз редактировалось mahatmaQL; 12.04.2014 в 22:05.
mahatmaQL вне форума Ответить с цитированием
Старый 12.04.2014, 22:11   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

mahatmaQL
Давай сразу уточним термины.
тип string[65] это вариант паскалевского типа Shortstring. 65 означает что под переменную этого типа выделено 66 байт. Их них в байт с нулевым индексом записывается текущая длина строки. А в остальные байты - сама строка.
northener вне форума Ответить с цитированием
Старый 12.04.2014, 22:45   #7
mahatmaQL
Пользователь
 
Регистрация: 02.04.2014
Сообщений: 18
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
mahatmaQL
Давай сразу уточним термины.
тип string[65] это вариант паскалевского типа Shortstring. 65 означает что под переменную этого типа выделено 66 байт. Их них в байт с нулевым индексом записывается текущая длина строки. А в остальные байты - сама строка.
собственно, это я и хотел сказать.

имя строку в 65 байт, я обозвал ее переменной string[65]. Получив, таким образом, первый байт=длине строки (в моем случае Ord('$')=36). поэтому у меня не получалось считать всю строку, а только первые ее 36 символов. В моем случае был файл строк с Length(str)=65, а не файл строк типа string[65]. В этом была ошибка.

Последний раз редактировалось mahatmaQL; 12.04.2014 в 22:54.
mahatmaQL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Vba строка более 255 символов sir.andrey Помощь студентам 5 15.04.2013 10:54
Строка больше 255 символов? TwiX Общие вопросы Delphi 6 07.12.2009 16:53
Строка длинною более 255 символов Kuzya59 Общие вопросы Delphi 7 27.09.2009 20:29
SQl и поля с длино более 255 символов JordanS БД в Delphi 16 21.06.2008 08:13