Имя: Пароль:
1C
1С v8
Работа с двоичными данными
0 alexei366
 
19.06.12
16:21
Есть двоичные данные, я знаю что текст. Подскажите как можно переводить из двоичных в текст, сейчас я сначала сохраняю двоичные данные, потом открываю как текс, делаю что надо, а потом удаляю файл.
1 andrewks
 
19.06.12
16:22
данные в ХЗ?
2 H A D G E H O G s
 
19.06.12
16:22
Так и делай дальше.
3 Irbis
 
19.06.12
16:23
Сейчас спрося что такое ХЗ.
4 H A D G E H O G s
 
19.06.12
16:24
Раньше я тоже комплексовал по такому поводу, но потом для себя пояснил, что жесткий диск - это такая же память, а с учетом 16-32 мегабайтного кэша  - ничем и не хуже.
5 Stim
 
19.06.12
16:27
а еще можно открывать мп3 файлы как текст - и читать ноты и слова
6 azernot
 
19.06.12
16:30
(5) Ща дойдёт до чтения сценария из avi
7 alexei366
 
19.06.12
16:38
возвращаюсь, а тут по делу не написали. Есть другой вариант или идеи или нет?
8 andrewks
 
19.06.12
16:38
не, ну теоретически-то можно. только геморно
9 Irbis
 
19.06.12
16:39
(7) А ты думал на форум программистов попал?
10 alexei366
 
19.06.12
16:39
а ХЗ мне не надо,инфа там только для разбора и выставления статусов
11 Fragster
 
гуру
19.06.12
16:39
бэйз64 и свой декодер
12 alexei366
 
19.06.12
16:40
Вот с момента только геморно поподробней
13 andrewks
 
19.06.12
16:40
(12) -> (11)
14 andrewks
 
19.06.12
16:41
(10) так у тебя откуда ДД появляются?
15 alexei366
 
19.06.12
16:41
Свой декодер на уровне языка 1С, быстрее будет сохранять а потом читать
16 Fragster
 
гуру
19.06.12
16:41
(13) Глобальный контекст
Base64Строка (Base64String)
Синтаксис:
Base64Строка(<Значение>)
Параметры:
<Значение> (обязательный)
Тип: ДвоичныеДанные. Двоичные данные, которые необходимо закодировать по алгоритму base64.
Возвращаемое значение:
Тип: Строка.
Описание:
Получает строку, закодированную по алгоритму base64.
См. также:
Глобальный контекст, метод Base64Значение
17 alexei366
 
19.06.12
16:42
ДД это вложение письма
18 andrewks
 
19.06.12
16:42
(16) спасибо, но СП у меня есть
19 Agent ООЗ
 
19.06.12
16:42
кто бы мог подумать, но текст это и есть двоичные данные.
20 alexei366
 
19.06.12
16:43
такс при помощи функций с б64 ютф не получишь
21 H A D G E H O G s
 
19.06.12
16:54
(20) Естественно.
22 Fragster
 
гуру
19.06.12
16:55
(20) почему?
23 H A D G E H O G s
 
19.06.12
16:55
(20) Тебе еще писать encoder из base64Строки в байтовый массив, а потом его через Символ() переводить в текст.
24 andrewks
 
19.06.12
17:00
(23) можно готовое взять: http://www.manhunter.ru/webmaster/423_funkcii_base64_na_javascript.html

и обернуть в msscriptcontrol (это если на винде)
25 H A D G E H O G s
 
19.06.12
17:02
(24) Плохой, негодный алгоритм.
26 H A D G E H O G s
 
19.06.12
17:02
b64encoded +=  - фууу.
27 alexei366
 
19.06.12
17:08
не перенести на 1С не сложно, вот я то думал мож какой стандартный метод в 1С есть
28 H A D G E H O G s
 
19.06.12
17:10
Вот рассово верный код на Дельфи, бес всяких инкрементов строк..

function _Base64Decode(CinLine: ansistring; var OutStream: TMemoryStream): boolean;
const RESULT_ERROR = -2;
var inLineIndex: Integer;
 c: ansiChar;
 x: SmallInt;
 c4: Word;
 StoredC4: array[0..3] of SmallInt;
 InLineLength: Integer;
 buf: Byte;
begin
 OutStream := TMemoryStream.Create();
 inLineIndex := 1;
 c4 := 0;
 InLineLength := Length(CinLine);
 OutStream.SetSize(Round(InLineLength*0.75));
 while inLineIndex <= InLineLength do
 begin
   while (inLineIndex <= InLineLength) and (c4 < 4) do
   begin
     c := CinLine[inLineIndex];
     case c of
       '+': x := 62;
       '/': x := 63;
       '0'..'9': x := Ord(c) - (Ord('0') - 52);
       '=': x := -1;
       'A'..'Z': x := Ord(c) - Ord('A');
       'a'..'z': x := Ord(c) - (Ord('a') - 26);
     else
       x := RESULT_ERROR;
     end; // case
     if x <> RESULT_ERROR then
     begin
       StoredC4[c4] := x;
       Inc(c4);
     end;
     Inc(inLineIndex);
   end;
   if c4 = 4 then
   begin
     c4 := 0;
     buf := ((StoredC4[0] shl 2)
       or (StoredC4[1] shr 4));
     OutStream.Write(buf, 1);
     if StoredC4[2] = -1 then Exit;
     buf := ((StoredC4[1] shl 4)
       or (StoredC4[2] shr 2));
     OutStream.Write(buf, 1);
     if StoredC4[3] = -1 then Exit;
     buf := ((StoredC4[2] shl 6)
       or (StoredC4[3]));
     OutStream.Write(buf, 1);
   end;
 end;
end;
29 andrewks
 
19.06.12
17:11
(28) на дельфи любой дурак напишет
30 H A D G E H O G s
 
19.06.12
17:12
(29) :-)
31 H A D G E H O G s
 
19.06.12
17:14
(29) Ты умеешь?
32 H A D G E H O G s
 
19.06.12
17:14
(27) Бугага.
33 alexei366
 
19.06.12
17:30
Проблема вообще проблема одна, у текстового документа нету в конструкторе для подстановки типа двоичные данные только путь. А побитовых операций в 1с я не видел пока
34 andrewks
 
19.06.12
17:34
(31) чего? на дельфи писать?
35 H A D G E H O G s
 
19.06.12
17:35
(34) Ага.
36 andrewks
 
19.06.12
17:38
(35) теоретически - да. но в последний раз это было очень давно, лет так 5 назад. хотя, при необходимости, восстановиться недолго
37 alexei366
 
19.06.12
17:57
тута на форуме нашёл
topic.php?id=282702
38 experimentator76
 
19.06.12
18:07
(33) искренне соболезную
39 experimentator76
 
19.06.12
18:07
(36) если решишься то лучше на православном си - ну его нафиг дельфи
40 andrewks
 
19.06.12
18:12
(39) на си я тоже писал. на чём я только не писал...

бэйсик, паскаль, си, ассемблер, пролог, 1С.
русский - со словарём :-)
41 experimentator76
 
19.06.12
18:15
(40) из этого только пролог незнаком - так что ты не одинок :)
42 alexei366
 
19.06.12
18:38
Короче я решил. Ищем ком объект какой-нибудь и при помощи него делаем.Буду признателен если кто поможет
43 H A D G E H O G s
 
19.06.12
21:37
1) Скачиваем
http://zalil.ru/33473782
2) Regsvr32 на него
3) Юзаем код (если Двоичные - в utf8)
   Двоичное=Новый ДвоичныеДанные ("C:\test.txt");
   Ком=Новый COMОбъект("Hadgehogs.Base64Converter");
   Сообщить(Base64Строка(Двоичное));
   Сообщить(Ком.Convert(Base64Строка(Двоичное),1));
4) Или код (если Двоичные - в ANSI):

   Двоичное=Новый ДвоичныеДанные ("C:\test.txt");
   Ком=Новый COMОбъект("Hadgehogs.Base64Converter");
   Сообщить(Base64Строка(Двоичное));
   Сообщить(Ком.Convert(Base64Строка(Двоичное),2));
44 andrewks
 
19.06.12
21:41
(43) если не жалко, кинь, плиз, исходники в личку
45 H A D G E H O G s
 
19.06.12
21:46
http://zalil.ru/33473851

Там проект весь, не жалко :-)
46 andrewks
 
19.06.12
21:51
(45) спасибо! :)  всё собираюсь какую-нибудь ВК замутить, да никак руки не доходят.  (мечтательно) вот как сдам алкопивные декларации, да переведу все з/п и бухии на 8-ки, так и начну
47 alexei366
 
20.06.12
09:59
Спасибо большое!!!
48 smaharbA
 
20.06.12
10:02
двоичные данные это массив и поток его легко преобразует
49 Kyon8
 
20.06.12
10:17
Откопал тут в УПП, а вы говорите, что сохранять на диск не православно...

   Если ОбъектВерсионируется(Источник, ЧислоВерсийОбъекта) Тогда
       
       ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
       
       ЗаписьXML = Новый ЗаписьXML;
       ЗаписьXML.ОткрытьФайл(ИмяВременногоФайла);
       ЗаписьXML.ЗаписатьОбъявлениеXML();
       ЗаписатьXML(ЗаписьXML, Источник, НазначениеТипаXML.Явное);
       ЗаписьXML.Закрыть();
       
       ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла);
       ХранилищеДанных = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));
       
       УдалитьФайлы(ИмяВременногоФайла);
       
       ВерсионированиеОбъектовПривилегированный.ЗаписатьВерсиюОбъекта(Источник.Ссылка, ЧислоВерсийОбъекта, ХранилищеДанных);
       
   КонецЕсли;
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший