| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > Type mismatch или можно попроще? |
| Автор: neiron 19.4.2006, 01:40 | ||||
| снова я... В общем, программка моя создаёт некий файл последовательного доступа - одна строка - одно число. Записи создаются через Print. Записи превращаются в текст. Т.е. когда я эти самые данные пытаюсь вытащить через:
где GenKolIt числового типа, мне выдаётся ошибка о несовпадении. Выход-то я нашёл, но корявый как мне кажется... создал новую строковую, и сначала записываю в неё, а уж потом перевожу:
и т.д. Неудобности две - в два раза больше кода, что собственно не самое главное. Главное то, что сначала необходимо посмотреть какого типа переменная, а потом уже писать перевод - то ли CInt, то ли Cbyte, то ли CDbl... В общем, суть вопроса: есть ли способ а) сохранять данные не в текстовом, а числовом виде? б) читать текстовые данные в переменные напрямую? |
| Автор: SW1 19.4.2006, 04:53 | ||||
эту проблему тебе не обойти т.к. функция input возращает всегда текстовый тип файлов а если тебе не нравится все записывать дважды и у тебя много данных сделай вспомогательную функцию. В принципе могу сей час ошибиться:
могут возникнуть проблемы так как не проверял Ответ на вопрос
файл на то и называется текстовым что в него можно сохранять только текст а на второй вопрос кажется ответил |
| Автор: neiron 19.4.2006, 13:46 |
| спасибо ещё раз ;) Akina, если использовать Input, то будут читаться и разделители (запятые), а т.к. в файле и double и long хранятся, то при считывании строки 1234,5678 (одно число) данные будут заноситься в две переменные. Line Input считывает всю строку полностью и воспринимает как единое число... Т.е. Line Input используется после Print, а Input после Write. |
| Автор: Akina 19.4.2006, 14:36 | ||||||||
Вернемся к первоисточнику:
Ну и где там "как единое число"? Аналогично:
Не догма, аднака... |
| Автор: neiron 19.4.2006, 18:14 |
| Скорее всего, эт я не так выразился ;) Тут скорее нужно говорить не "воспринимает как одно число", а "читает без разделителей". Т.е. если Input обращает внимание на запятые, то LineInput нет. А "единое число" не воспринимается, а выводится из текстовой переменной, в которую данные считываются. А насчёт второго... ну естественно... никакой ошибки не будет... просто если записываешь через один оператор, то для корректного считывания использовать соответствующий оператор. Например, в строку файла заносишь какое-либо число дробное десятичное (заносишь через Print). И тебе нужно узнать его целую или дробную часть. Разумнее не считывать через Line, а затем вычислять остаток - уйдёт 4 оператора, а просто использовать Input - тогда две строчки - input# и cint#. Но если тебе нужно именно число целиком, то проще читать через Line Input... Да, тут ещё вопросик появился... Есть ли возможность в VB сохранять числа в файле с разделителем целой/дробной части не в виде запятой, а в виде точки? Как понимаю, можно функцию небольшую написать, преобразующую дробное число в такой текстовый формат(разделение, а потом конкантенация с точкой)... а встроенное что-нибудь есть? |
| Автор: cardinal 19.4.2006, 23:04 |
| Посмотри функции Format или там Replace... |
| Автор: neiron 20.4.2006, 13:59 | ||
| спасибо, raplace подошёл. Я это к чему спрашивал: Если разделителем целой/дробной ставить не запятую, а точку, то тогда можно использовать Input, причём обходясь без строковой. Честно, не разбирался почему, но работает... Т.е. если у меня есть файл: 123.456 234.567 456.789 то
будет работать, даже если dblA не строковая, а числовая... |
| Автор: Akina 20.4.2006, 16:06 |
Это называется "неявное приведение типа" и страшно не рекомендуется - вот именно из-за проблем, схожих с проблемой "точка/запятая". |