|
Запись в файл строки определенного размера | ☑ | ||
---|---|---|---|---|
0
Kondarat
24.09.13
✎
09:32
|
Суть задачи такова: необходимо сформировать файл определенного наименования и расширения для последующей его обработки в сторонней программе. Требования к структуре таковы: каждая запись должна быть размером ровно 21 байт и иметь такую структуру:
Поле_1 - 14 байт Поле_2 - 4 байта Поле_3 - 2 байта Поле_4 - 1 байт При этом 1,3,4 поля могут быть буквенно - цифровыми, 2 - число должно быть приведено к формату unsigned long (C/C++ convention). Например Число 105000 - 28 9A 01 00. На просторах этого форума нашел как преобразовать число и записать в файл. Однако есть вопрос. Например: Поле_1 = 123ВПАВП12 (10 символов) достаточно ли дополнить его 4-мя пробелами, чтобы получилось 14 байт? И как записать пустой символ, например для Поля_4 если он не задан? Один пробел? |
|||
1
Fish
24.09.13
✎
09:47
|
(0) Про dbf когда-нибудь слышал?
|
|||
2
Kondarat
24.09.13
✎
09:49
|
(1) Слышал. Ну и...?
|
|||
3
Fish
24.09.13
✎
09:51
|
(2) Вот он и предназначен для хранения данных заданной структуры. И не надо ничего изобретать.
|
|||
4
Infsams654
24.09.13
✎
09:51
|
(0) Поле_х = Прав(" " + Поле_х, НужноеКоличество);
|
|||
5
Kondarat
24.09.13
✎
10:01
|
(3) Если бы требовался файл формата dbf вопроса на форуме не появилось бы.
|
|||
6
Infsams654
24.09.13
✎
10:01
|
(5) ну а все-таки (4) попробуй
|
|||
7
Kondarat
24.09.13
✎
10:02
|
(4) Т. е. пробелы должны быть перед Поле_х. Так?
|
|||
8
Infsams654
24.09.13
✎
10:11
|
(7) а что не Так?
Поле_1 - 14 байт Поле_2 - 4 байта Поле_3 - 2 байта Поле_4 - 1 байт Заполняешь слева пробелами и берешь правые символы в нужном количестве. |
|||
9
Infsams654
24.09.13
✎
10:19
|
(7) если непонятно (Поле_2) как сделать строковое представление числа в 16-чном виде, то на эту тему много всего есть, например, DEC -> HEX. Как?
|
|||
10
Кирпич
24.09.13
✎
10:20
|
(0)А просто попробовать и посмотреть что получится?
|
|||
11
Kondarat
24.09.13
✎
10:24
|
(10) Пробую конечно. Не жду окончательного решения здесь. Просто в теме не очень силен.
|
|||
12
le_
24.09.13
✎
10:29
|
(0) В ASCII один символ - 1 байт. В UTF-8 один символ - 2 байта. Плюс еще есть непечатные символы, признак конца строки, возврат каретки и пр.
|
|||
13
Kondarat
24.09.13
✎
10:39
|
(12) Тут буржуйское описание. Записи должны быть отсортированы по первому полю(ASCII-sorted ) и не иметь в конце символов CRLF.
Получается для 1,3,4 поля достаточно сделать как в (4) |
|||
14
Infsams654
24.09.13
✎
10:43
|
(11) да, еще, не забудь, про неразрывный пробел, пользуй для преобразования числа в строку Формат(ТоЧисло, "ЧГ = 0");.
ну и как пишет (12), надо преобразовать из UTF Функция КодСимволаASCII(Символ) КодUNICODE = КодСимвола(Символ); Если ((КодUNICODE > 1039) И (КодUNICODE < 1104)) Тогда Возврат (КодUNICODE - 848); ИначеЕсли КодUNICODE = 8470 Тогда Возврат 185; ИначеЕсли КодUNICODE = 1105 Тогда Возврат 184; ИначеЕсли КодUNICODE = 1025 Тогда Возврат 168; Иначе Возврат КодUNICODE; КонецЕсли; КонецФункции |
|||
15
le_
24.09.13
✎
10:47
|
(13) Думается мне, CRLF 1с-кой не отрезать.
|
|||
16
Kondarat
24.09.13
✎
10:48
|
(14) Преобразовать все поля?
|
|||
17
Kondarat
24.09.13
✎
10:49
|
(15) Я записываю в файл с помощью "Scripting.FileSystemObject"
|
|||
18
Infsams654
24.09.13
✎
10:54
|
(15) про CRLF ничего в (0) не сказано. Думается, что это все-таки построчно записывается.
Так, что все разжевано, что еще надо ? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |