![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
neiron |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 18.4.2006 Где: Краснодар Репутация: 3 Всего: 4 |
снова я...
В общем, программка моя создаёт некий файл последовательного доступа - одна строка - одно число. Записи создаются через Print. Записи превращаются в текст. Т.е. когда я эти самые данные пытаюсь вытащить через:
где GenKolIt числового типа, мне выдаётся ошибка о несовпадении. Выход-то я нашёл, но корявый как мне кажется... создал новую строковую, и сначала записываю в неё, а уж потом перевожу:
и т.д. Неудобности две - в два раза больше кода, что собственно не самое главное. Главное то, что сначала необходимо посмотреть какого типа переменная, а потом уже писать перевод - то ли CInt, то ли Cbyte, то ли CDbl... В общем, суть вопроса: есть ли способ а) сохранять данные не в текстовом, а числовом виде? б) читать текстовые данные в переменные напрямую? |
||||
|
|||||
SW1 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 17.4.2006 Репутация: нет Всего: нет |
эту проблему тебе не обойти т.к. функция input возращает всегда текстовый тип файлов а если тебе не нравится все записывать дважды и у тебя много данных сделай вспомогательную функцию. В принципе могу сей час ошибиться:
могут возникнуть проблемы так как не проверял Ответ на вопрос
файл на то и называется текстовым что в него можно сохранять только текст а на второй вопрос кажется ответил Это сообщение отредактировал(а) SW1 - 19.4.2006, 04:57 |
||||
|
|||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
а) нет - при переходе от QB к VB функции CVx/MKx умерли. Однако ты не гоняйся за байтами - конвертируй все в Long.
б) sStr = Input(NumOfBytes,#FileNumber) - или InputB.
а какого ты Line Input используешь??? он всегда возвращает строку - это даже из названия ясно... используй просто Input. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
neiron |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 18.4.2006 Где: Краснодар Репутация: 3 Всего: 4 |
спасибо ещё раз ;)
Akina, если использовать Input, то будут читаться и разделители (запятые), а т.к. в файле и double и long хранятся, то при считывании строки 1234,5678 (одно число) данные будут заноситься в две переменные. Line Input считывает всю строку полностью и воспринимает как единое число... Т.е. Line Input используется после Print, а Input после Write. |
|||
|
||||
Akina |
|
||||||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Вернемся к первоисточнику:
Ну и где там "как единое число"? Аналогично:
Не догма, аднака... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||||||
|
|||||||||
neiron |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 18.4.2006 Где: Краснодар Репутация: 3 Всего: 4 |
Скорее всего, эт я не так выразился ;)
Тут скорее нужно говорить не "воспринимает как одно число", а "читает без разделителей". Т.е. если Input обращает внимание на запятые, то LineInput нет. А "единое число" не воспринимается, а выводится из текстовой переменной, в которую данные считываются. А насчёт второго... ну естественно... никакой ошибки не будет... просто если записываешь через один оператор, то для корректного считывания использовать соответствующий оператор. Например, в строку файла заносишь какое-либо число дробное десятичное (заносишь через Print). И тебе нужно узнать его целую или дробную часть. Разумнее не считывать через Line, а затем вычислять остаток - уйдёт 4 оператора, а просто использовать Input - тогда две строчки - input# и cint#. Но если тебе нужно именно число целиком, то проще читать через Line Input... Да, тут ещё вопросик появился... Есть ли возможность в VB сохранять числа в файле с разделителем целой/дробной части не в виде запятой, а в виде точки? Как понимаю, можно функцию небольшую написать, преобразующую дробное число в такой текстовый формат(разделение, а потом конкантенация с точкой)... а встроенное что-нибудь есть? |
|||
|
||||
cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 19 Всего: 99 |
Посмотри функции Format или там Replace...
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
neiron |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 18.4.2006 Где: Краснодар Репутация: 3 Всего: 4 |
спасибо, raplace подошёл.
Я это к чему спрашивал: Если разделителем целой/дробной ставить не запятую, а точку, то тогда можно использовать Input, причём обходясь без строковой. Честно, не разбирался почему, но работает... Т.е. если у меня есть файл: 123.456 234.567 456.789 то
будет работать, даже если dblA не строковая, а числовая... ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Это называется "неявное приведение типа" и страшно не рекомендуется - вот именно из-за проблем, схожих с проблемой "точка/запятая". -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "VB6" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB6 | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |