Строки фиксированной длины

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Строки фиксированной длины

Сообщение Faust » 16.01.2004 (Пт) 21:25

Возможно ли объявить строковую переменную фиксированой длины, если эта длина на момент объявления хранится в другой переменной (узнать длину заранее невозможно, т.к. она определяется пользователем)? Заранее благодарен.
Листинги не горят!

vilin
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 06.01.2004 (Вт) 22:11
Откуда: Кишинёв

Сообщение vilin » 16.01.2004 (Пт) 23:32

Чтобы объявить строку фиксированной длины, пиши:

Код: Выделить всё
Dim Length as Integer
       Length = 50
Dim MyString(Length) as String


В процессе выполнения проги можно изменять переменную Length...
У каждого додика - своя методика.

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 17.01.2004 (Сб) 0:27

vilin писал(а):Чтобы объявить строку фиксированной длины, пиши:

Код: Выделить всё
Dim Length as Integer
       Length = 50
Dim MyString(Length) as String


В процессе выполнения проги можно изменять переменную Length...

ХА!...Ты просто создал одномерный массив из 50 элементов...эт тебе не трубо паскаль :twisted:

А зачем тебе строка с фиксированной длинной? Басик выделяет память динамически, в отличае от паскаля... В принципе можно потом проверить строку на длинну...
Dim Str as string
if Len(str)>'твоего значения' then 'аболтус, строка длиннее, чем надо'
:roll:

vilin
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 06.01.2004 (Вт) 22:11
Откуда: Кишинёв

Сообщение vilin » 17.01.2004 (Сб) 21:31

Извините, перепутал...
У каждого додика - своя методика.

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 20.01.2004 (Вт) 20:51

А зачем тебе строка с фиксированной длинной?

Объясняю: требуется работать с файлом произвольного доступа, длина записи которого заранее неведома. При попытке использовать в операторе Put строку динамической длины возникает ошибка о неправильной длине записи (даже если предварительно длина переменной "подганялась" под длину записи). При использовании строк фиксированной длины глюк исчезает.
Листинги не горят!

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 20.01.2004 (Вт) 21:18

Faust писал(а):
А зачем тебе строка с фиксированной длинной?

При попытке использовать в операторе Put строку динамической длины возникает ошибка о неправильной длине записи ...

А что, кроме оператора Put никак нельзя записать в файл... Используй другие операторы... :roll:

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 20.01.2004 (Вт) 22:22

А что, кроме оператора Put никак нельзя записать в файл... Используй другие операторы...

Поподробней, пожалуйста. Что Вы предлагаете?
Последний раз редактировалось Faust 01.02.2004 (Вс) 13:52, всего редактировалось 1 раз.
Листинги не горят!

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 20.01.2004 (Вт) 22:27

А что, кроме оператора Put никак нельзя записать в файл... Используй другие операторы...

Поподробней, пожалуйста. Что Вы предлагаете?
Листинги не горят!

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 20.01.2004 (Вт) 22:28

А что, кроме оператора Put никак нельзя записать в файл... Используй другие операторы...

Поподробней, пожалуйста. Что Вы предлагаете?
Листинги не горят!

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 20.01.2004 (Вт) 23:32

Код: Выделить всё
Open "File" For Output As #1 'открывает файл, стирает всё его содержимое и пишет (если файл не существует - делает его)
Print #1, s 's-строка
Close #1

Open "File" For Append As #1 'открывает файл, пишет в него, дописывая в конец
Print #1, s 's-строка
Close #1
Нет меня больше

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 21.01.2004 (Ср) 1:10

Как ты пользуешься командой Put??

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Строки фиксированной длины

Сообщение Vi » 21.01.2004 (Ср) 9:18

Faust писал(а):Возможно ли объявить строковую переменную фиксированой длины, если эта длина на момент объявления хранится в другой переменной (узнать длину заранее невозможно, т.к. она определяется пользователем)?

Код: Выделить всё
  Dim str As String
  str = String(strlen, " ")

Здесь str будет строкой вполне определенного размера, годной для передачи куда-нибудь или для чтения/записи.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 01.02.2004 (Вс) 14:10

Всем спасибо. Метода задавать строки фиксированной длины через не-константы я не нашел, а с записью в файлы произвольного доступа разобрался. При открытии файла следует задавать длину записи на 2 байта больше, чем максимальный размер строки динамической длины. В этих-то двух байтах будет хранится её размер. То есть:
Код: Выделить всё
Dim S As String
S="1234567890"
Open App.Path & "\list.exp" For Random As #1 Len = Len(S) + 2
Put #1,1,S
Close #1

будет работать.

ЗЫ. А файл, из-за которого все начиналось, я теперь обрабатываю в Binary :? - вот так жизнь складывается ...
Листинги не горят!

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 01.02.2004 (Вс) 14:10

Всем спасибо. Метода задавать строки фиксированной длины через не-константы я не нашел, а с записью в файлы произвольного доступа разобрался. При открытии файла следует задавать длину записи на 2 байта больше, чем максимальный размер строки динамической длины. В этих-то двух байтах будет хранится её размер. То есть:
Код: Выделить всё
Dim S As String
S="1234567890"
Open App.Path & "\list.exp" For Random As #1 Len = Len(S) + 2
Put #1,1,S
Close #1

будет работать.

ЗЫ. А файл, из-за которого все начиналось, я теперь обрабатываю в Binary :? - вот так жизнь складывается ...
Листинги не горят!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25

    TopList