|   |   | 
| 
 | Какая кодировка текста соответствует 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) Ну, можно двоичные данные записать на диск и прочитать как строку - просто если там нули, то вопрос - а что прочитается в строке.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |