Имя: Пароль:
1C
1С v8
Какая кодировка текста соответствует UNIX ANSI
0 zyto
 
11.02.17
12:23
Если я в Notepad++ вижу вот такую кодировку:
http://screenshot.su/img/5c/08/f3/5c08f30c24a4989b34b6dae064f0a8bf.jpg

то какой КодировкаТекста в 1С это соответствует?

Ну или можно ли как-то открыть существующий файл, удалить пару символов и записать его БЕЗ изменения исходной кодировки?
Я так понимаю если в ЧтениеТекста/ЗаписьТекста не передать кодировку - то она будет автоматически приведена к UTF-8...

Есть ли другие способы изменения файла кроме ЗаписьТекста?
1 mehfk
 
11.02.17
12:54
UNIX в данном случае означает соттветствующий формат концов строк.
2 Кирпич
 
11.02.17
12:54
Ну вот попробуй и расскажи нам, что получилось
3 zyto
 
11.02.17
13:06
(2)Спасибо, ты очень помог!
Продолжай наблюдение дальше!
4 zyto
 
11.02.17
13:08
(1)1Ска может записать в таком же формате?

Я попробовал читать и записывать в ANSI, но видимо кодировка всё-таки нарушается и файл становится не читаемым.
5 mehfk
 
11.02.17
13:38
Вопрос из (0) должно быть стыдно задавать человеку, который в IT более полугода.
6 zyto
 
11.02.17
14:01
(5)Тоже очень полезный комментарий.
Большое спасибо!
7 mehfk
 
11.02.17
15:00
Анекдот вспомнился.

- Ты где работаешь?
- В аэропорту, туалеты мою.
- Ну и зачем тебе такая работа, брось её!
- ЧЁ! Вот так просто ВЗЯТЬ И уйти из авиации???!
8 zyto
 
11.02.17
17:50
Вот и внуки Петросяна подтянулись...
9 zyto
 
11.02.17
17:53
Подождём ещё, вдруг ещё ходят тут 1Сники
10 mehfk
 
11.02.17
18:11
Лучше поищи в гугле телефоны франчей в своем городе.
11 zyto
 
11.02.17
18:41
(10)лучше бы по делу чего-нибудь ответил, чем офтопить 3 раза подряд.
12 mehfk
 
11.02.17
18:44
Тебе код написать?
13 mehfk
 
11.02.17
18:45
2000 р/час. Минимум 1 час оплачивается.
14 trooba
 
11.02.17
18:48
(13) а можно всех посмотреть?
15 mehfk
 
11.02.17
18:51
(10)  Перечитай.
16 zyto
 
11.02.17
18:55
(15)ну т.е. по сабжу ты принципиально не отвечаешь?
17 mehfk
 
11.02.17
18:56
(16) Ты плохо видишь?
18 zyto
 
11.02.17
19:00
(17)Да, я к сожалению не вижу ни одного ответа на мои вопросы.
На какие-то другие вопросы ответы есть, клоунада - есть, оффтоп есть, а на мои вопросы к сожалению ответов нет...

А что видишь ты?
19 mehfk
 
11.02.17
19:09
Если со зрением все в порядке, но сообшения не доходят, попробуй перечить их еще раз :)
20 zyto
 
11.02.17
19:10
(19)Какое из своих сообщений ты считаешь ответом на вопрос?
21 mehfk
 
11.02.17
19:12
Тебя носом надо тыкать? Читай, думай, делай выводы. А то тебе и есть приготовь и разжуй, и в рот положи :)))
22 zyto
 
11.02.17
19:16
(21)А вот тыкни!

Проблема в том что тыкнешь ты только в пустую болтовню, понты и офтоп.
23 mehfk
 
11.02.17
19:18
Что еще сделать?
24 mehfk
 
11.02.17
19:19
Давай так:
25 mehfk
 
11.02.17
19:19
утром деньги, а вечером стулья.
26 zyto
 
11.02.17
19:19
(23)Т.е. ты согласен, что в этом топике нет ни одного полезного сообщения, и тыкнуть некуда :)
27 mehfk
 
11.02.17
19:21
Можешь ВР-у на развите ресурса (в кассу Мисты) перечислить и после подтверждения продолжим разговор.
28 zyto
 
11.02.17
19:22
Меня в этом случае интересует зачем такие как ты вообще заходят на форум и пишут свой бред?
Моя заинтересованность в этом топике понятна - я пытаюсь получить ответ на свой вопрос.
А чего добиваешься ты? Потешить своё ЧСВ? Ну ок, ты показал насколько ты крут в офтопе. Померяться сроком давностью в IT? Так у меня длиннее судя по полоске под ником.
Что я ещё упустил?
29 mehfk
 
11.02.17
19:22
В конструктивном русле. Сначала я тебя ткну в сообщение. Потом уточню задачу и напишу кусок кода для примера.
30 mehfk
 
11.02.17
19:23
Мерься-мерься.
31 zyto
 
11.02.17
19:23
Может мне тебя для начала ткнуть в вопросы, и деликатно подсказать что код мне не нужен?
Ну это на всякий случай, потому что похоже что чукча ни разу не читатель а пейсатель.
32 mehfk
 
11.02.17
19:24
Позовешь, когда оплатишь деньги.
33 zyto
 
11.02.17
19:25
(29)Опять пустые обещания. Потому что ткни в любое сообщение и оно будет офтопом... Поэтому и кочевряжишься тут... Умом-то блеснуть не получилось, надо как-то выкручиваться...
34 zyto
 
11.02.17
19:26
(32)У тебя настолько всё плохо в материальном плане что выпрашиваешь подачки?
Ну ок, скажи кошелёк, переведу тебе 100р, на хлеб с маслом хватит.
35 zyto
 
11.02.17
19:27
Если ты так на работе работаешь как тут на вопросы отвечаешь - то не мудрено что у тебя денег нет :)
36 b_ru
 
11.02.17
22:01
(0) Тебе нужно
ЗаписьТекста("МойФайл", КодировкаТекст.ANSI,,,Символы.ПС);

Но вообще айтишнику нужно знать ответ на этот вопрос, ибо очень широкоизвестная вещь из истории развития ВТ. Ну если ты бухгалтер, простительно наверное не знать...
37 zyto
 
11.02.17
22:29
Не помогает :(

Делаю так:
ТекЧтение = Новый ЧтениеТекста(ПутьКФайлу,КодировкаТекста.ANSI);    
ПолнаяСтрока = ТекЧтение.Прочитать();    
ТекЧтение.Закрыть();

ТекЗапись = Новый ЗаписьТекста(ПутьКФайлу2,КодировкаТекста.ANSI,,,Символы.ПС);    
ТекЗапись.Записать(ПолнаяСтрока);    
ТекЗапись.Закрыть();

Т.е. вообще ничего не меняю в файле - просто прочитал и записал. В итоге: отличаются размеры файлов (до записи и после), и в файле после записи на 1 строку меньше чем в оригинальном файле (напомню - ничего не меняю, просто читаю-записываю).
1С куда-то съедает одну строку.
Ну и как логичный результат - до записи файл читается, после - нет.
38 b_ru
 
11.02.17
23:02
Ну так открой файл в hex режиме и посмотри чего там не хватает. И допиши.
39 Torquader
 
11.02.17
23:53
Наверное, кто-то забыл последний перевод строки.
Только вот большинству программ на него просто положить.
Так что бояться нечего.

И, если мы указываем Символы.ПС, то мы даём команду ЗаписатьСтроку, которая к переданному параметру как раз и добавляет указанные нами символы.
Кроме того, можно ещё передать конвертируемые символы - то есть указать разделитель строк в файле - тогда вы радостно запишете одно, а система переведёт в другое.
40 zyto
 
12.02.17
10:07
Сравнил побайтно, 1С в середине файла удаляет некоторые символы, примеры:

(слева файл до изменения, справа после записи из 1С)

http://screenshot.su/img/c1/37/3e/c1373e1b1b41ca0aa0777660326b9d56.jpg

http://screenshot.su/img/d8/aa/91/d8aa9180ebd4bfb1cab6f0fe1cd7c4d3.jpg

И таких изменений достаточно много, и они все в середине файла...

Можно ли как-то через двоичные данные удалить нужное количество символов и сохранить файл без изменения кодировки?
41 b_ru
 
12.02.17
10:34
0D - это возврат каретки. Т.е. исходный файл у тебя не совсем в UNIX стиле записан, в нем таки есть Символы.ВК
Короче нужно его читать как двоичный, а не как текстовый. 1С это умеет с версии 8.3.9 http://v8.1c.ru/o7/201602bin/index.htm
Ну или можно какой-нибудь COM объект поюзать, если старая платформа и винда. Например, ADODB.Stream https://helpf.pro/faq8/view/1518.html
42 NorthWind
 
12.02.17
10:58
(40) вам же в (1) все написали. В системах U*X перевод строк осуществляется символом 0A, а в системах майкрософт начиная с DOS - 0D и 0A. Соответственно как это прочитается чтением текста - непонятно, а ЗаписьТекста вам точно добавит недостающий символ 0D. Как на это среагирует U*X - вопрос, может, и не очень хорошо. И это, вы вообще уверены что файлы текстовые? Визуально не очень похоже. Курите работу с бинарниками в 1С, вроде как 8.3 уже умеет если не очень старая. Или пишите программку на другом языке типа Си и дергайте экзешник из 1С.
43 Torquader
 
12.02.17
13:38
(41) Исходный файл записан с указанием Символы.ВК+Символы.ПС в переводе строки - и это стандартный для 1C режим - так что можно не парится, а просто писать.
44 Torquader
 
12.02.17
13:40
Если вы хотите читать-писать двоичный файл, то ADODB вам в помощь.
45 trdm
 
12.02.17
13:44
Объект TextStream
46 Torquader
 
12.02.17
13:50
(45) У ADODB можно позифионироваться на записях, а вот TextStream - только последовательное чтение (так как Skip - не совсем позиционирование).
Кроме того, TextStream работает с однобайтовыми строками, которые в 1С преобразуются в двухбайтовые - там придётся танцы с бубном организовывать.

Преимущество TextStream только в том, что можно прочитать кусок файла, не загружая его целиком в память.
47 Torquader
 
12.02.17
13:55
P.S. есть подозрение, что автор учится внедрять свой код внутрь чужой DLL - и спрашивается - зачем ему это делать из 1С ?
48 trdm
 
12.02.17
14:03
(46) > Кроме того, TextStream работает с однобайтовыми строками,

Вроде нет.
Объект FileSystemObject
Объект File
Методы
OpenAsTextStream
Синтаксис:

OpenAsTextStream(<Iomode>,<Format>)

Назначение:

Открывает текстовый файл и возвращает объект "TextStream", указывающий на него.

Параметры:

<Iomode> - необязательный, число. Возможные значения:
1 - Открыть файл только для чтения.
2 - Открыть файл для записи. Если файл уже существовал, его содержимое теряется.
8 - Открыть файл для добавления. Если файл уже существовал, информация будет дописываться в конец файла.
<Format> - необязательный, число. Возможные значения:
-2 - Открыть файл в формате, используемом системой по умолчанию.
-1 - Открыть файл в формате Unicode.
0 - Открыть файл в формате ASCII (по умолчанию).


Описание:

Без комментариев.

Пример:

Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.GetFile("C:\boot.ini")
Set TextStream = File.OpenAsTextStream(1)
MsgBox TextStream.ReadAll()
TextStream.Close
49 trdm
 
12.02.17
14:07
(0) > Ну или можно ли как-то открыть существующий файл, удалить пару символов и записать его БЕЗ изменения исходной кодировки?

Нужно просто знать кодировку и все. Открываешь в той что нужно и записываешь после правки в той что нужно.
50 Сияющий в темноте
 
12.02.17
14:52
(48) понятно,что он умеет в двухбайтовом режиме работатьт,но когда нужно один байт записать,приходится работать в однобайтовом,где при попытке запипи символа,выдаётся ошибка если в одноьайтовой кодировке его нет
Ну и ,в двух байтовом режиме,что будет в начале файла-даже 1с данные символы через обьект двоичные данные удаляет
Хотя,я писал редактор образа диска на JavaScript и через TextStream,после чего мы с ними не сошлись в скорости
51 zyto
 
12.02.17
16:07
(47)Подозрение необоснованное.
Задача "проста" до безобразия.
Есть некий вэб-сервер, который должен отдавать "нормальный" excel-файл, но по причине криворукости тамошних программеров фал отдаётся с "лишними" символами в начале - что-то типа куска java-script кода. (до программеров достучаться не получается, пробовал).

Если этот код удалить через notepad++ - всё работает отлично, думал должно так же нормально сработать и через 1С - но не прокатило.
К сожалению раньше не сталкивался с кодировками и с работой с бинарными файлами, поэтому и обратился к сообществу.

Какой оптимальный путь удаления десятка символов в начале excel-файла?
52 Провинциальный 1сник
 
12.02.17
16:09
(51) Работа с объектом ДвоичныеДанные в 8.3.9. Или костылить через внешние компоненты, vbs, base64.exe и т.п.
53 zyto
 
12.02.17
16:17
(52)Примерчик похожий нигде не встречался?
54 NorthWind
 
12.02.17
16:26
(51) в таком случае вы зря забили людям голову в (0). Нужно было сразу сказать, что приходит кривой файл Excel и его нужно исправлять. Тогда бы вам моментально сказали бы, что работать надо с двоичным файлом и ни о каком тексте (и кодировке) здесь речи не идет.
55 zyto
 
12.02.17
16:38
(54)Ну... Надо идти от простого к сложному :)
Работать с текстом гораздо проще чем с двоичными данными :)
56 NorthWind
 
12.02.17
16:41
(55) это да, но только Excel это не текст даже рядом. И работать с такими файлами напрямую 1С не умела лет двадцать и научилась совсем недавно.
57 Провинциальный 1сник
 
12.02.17
16:46
(56) В принципе очень давно умела, только через *опу. Объект ДвоичныеДанные с использоваием функций Base64Строка(<Значение>) и Base64Значение(<Строка>). Сначала создаем строку с 64-ричной хренью, потом её парсим, меняем ненужные символы на нужные и обратно засовываем в ДД.
58 Torquader
 
13.02.17
03:20
(57) Прям так взяли и положили файл Excel в Base64 строку - интересно - на каком размере файла 1С хрюкнется ?
59 Провинциальный 1сник
 
13.02.17
06:30
(58) base64 занимает места на треть больше по сравнению с исходными данными.
60 zyto
 
13.02.17
07:40
Так как лучше сделать? :)
Размер экселевского файла около 5Мб
61 Провинциальный 1сник
 
13.02.17
11:30
(60) Я бы через ДД и парсинг base64 сделал. 5 мегабайт - не тот размер, чтобы беспокоиться.
62 zyto
 
13.02.17
14:26
Я правильно понял что ДвоичныеДанные можно преобразовать в строку только через Base64? Без доп. кодирования нельзя строку получить?
63 zyto
 
13.02.17
14:48
В итоге получилось так:
    ДД = Новый ДвоичныеДанные(ПутьКФайлу);
    
    Строка64 = Base64Строка(ДД);
    
    НовДД = Base64Значение(Прав(Строка64,СтрДлина(Строка64)-78));    
    
    НовДД.Записать(ПутьКФайлу2);

Число 78 получилось империческим путём... при этом удаляется 57 символов из исходного файла.

(61) Огромное тебе человеческое спасибо!
64 Кирпич
 
13.02.17
15:41
(63) зачем Base64?

Чтение = Новый ЧтениеДанных(ПутьКФайлу);
Запись = Новый ЗаписьДанных(ПутьКФайлу2);
Чтение.Пропустить(78);
Чтение.ИсходныйПоток().КопироватьВ(Запись.ЦелевойПоток());
65 Кирпич
 
13.02.17
15:42
на счет 78 не уверен. короче, ставь в байтах сколько пропустить.
66 zyto
 
13.02.17
15:54
(65)Благодарю, попробую
67 Torquader
 
13.02.17
18:20
(62) Ну, можно двоичные данные записать на диск и прочитать как строку - просто если там нули, то вопрос - а что прочитается в строке.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.