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