|
v7: csv созданная в 1с и Excel отличается на 2 байта. Excel читается дальше 1с-ный нет. | ☑ | ||
---|---|---|---|---|
0
uno-group
18.11.19
✎
12:05
|
Текст=СоздатьОбъект("Текст");
Текст.ДобавитьСтроку("RCP32-1.0;;;;;;;;;;;;;;;"); Текст.ДобавитьСтроку(";;;;;;;;;;;;;;;"); Текст.ДобавитьСтроку("16;1;3;2;3;;;;;;;;;;;"); Текст.ДобавитьСтроку("19;11;18;1;4370;625;655;640;1;0;0;0;0;0;0;0"); Текст.КодоваяСтраница(0); Текст.Записать("C:\Весы\NARJAD_FA5.csv"); Получается из 1с файл в 109 байт и устройством не принимается. если открыть его в Excel и перезаписать получатся 111 байт и файл принимается. как побороть? |
|||
1
ДенисЧ
18.11.19
✎
12:07
|
BOM добавь...
Правда, 77 его не умеет, но всё равно добавь )) |
|||
2
Кирпич
18.11.19
✎
12:10
|
возьми да и сравни файлы. чо здесь то спрашивать
|
|||
3
vova1122
18.11.19
✎
12:48
|
(0) Проверил по вашей инструкции. Ексель добавляйет в конце еще перевод строки
|
|||
4
uno-group
18.11.19
✎
15:19
|
(3)Добавил, проглотил. Как читать из 1с csv где разделитель табуляция. Через текст не хочет дает ошибку уже в количестве строк пишет что всего 1 строка.
|
|||
5
Злопчинский
18.11.19
✎
15:33
|
Сформированное в (0) спокойно читается в 1С обычными методами обработки обьекта "Текст"
если разделитель табулятор - это ничем не отличается. СЗ = глРазложить(СтрокаТекстаСТабуляторами,СимволТабуляции); далее СЗ.ПолучитьЗначение(1), ..(2)... . только я глРазложить переписал для более быстрой работы, используя создание СЗ из строки типа ЗначениеИзСтроки |
|||
6
Kigo_Kigo
18.11.19
✎
15:34
|
Ну или СтраЗаменить(СтрокаТекста,СимволТабуляции,";")
|
|||
7
Злопчинский
18.11.19
✎
15:45
|
(4) я как раз если надо быстро что-то выгрузить-загрузить простенькое - так и формирую, выгрузил с табуляторами, загрузил с табуляторами. и пошел кофе пить.
|
|||
8
uno-group
18.11.19
✎
16:15
|
код символа в просмотрщике смотрю = 9 и соответственно объект текст с таким текстом работать не хочет
|
|||
9
Злопчинский
18.11.19
✎
16:18
|
(8) наглый трындеж.
все работает замечательно. |
|||
10
uno-group
18.11.19
✎
16:18
|
и Соответственно текст.количествоСтрок() показует что равно 1. хотя тих там 60.
и Текст.ПолучитьСтроку(1) Выдает "апап" хотя в строке 20 значений разделеных табуляцией и такой абракодабры вообще нет. |
|||
11
uno-group
18.11.19
✎
16:21
|
пересохранил через ексель на разделитель "," работает, на ";" работает. может через v7plus читать? строка имеет длинну 189 символов.
|
|||
12
uno-group
18.11.19
✎
16:26
|
//*******************************************
Процедура Оброботка(Файл); Тов=СоздатьОбъект("Справочник.ТМЦ"); Спр=СоздатьОбъект("Справочник.Полеты"); Спр.ИспользоватьВладельца(Оборудование); МинВес=Продукция.ВесЯщикаМин; МаксВес=Продукция.ВесЯщикаМакс; Текст=СоздатьОбъект("Текст"); Текст.Открыть("D:\1с\Фа5\"+Файл); Текст.КодоваяСтраница(0); Если Текст.КоличествоСтрок()<2 Тогда Предупреждение("Мало строк в: "+Файл ); Возврат; КонецЕсли; Сообщить("хороший файл",Файл); КонецПроцедуры //******************************************* Процедура СформироватьФА5() Фс.УстТекКаталог("D:\1с\Фа5"); Фильтр="FA5_Date-"+ДатаГод(ДатаДок)+"-"+Прав("0"+ДатаМесяц(ДатаДок),2)+"-"+Прав("0"+ДатаЧисло(ДатаДок),2)+"_*.csv"; Файл=ФС.НайтиПервыйФайл(Фильтр); Пока ПустоеЗначение(Файл)=0 Цикл Оброботка(Файл); Файл=ФС.НайтиСледующийФайл(); КонецЦикла; Файл=0; КонецПроцедуры в папке 5 файлов 2 пересохранил через эксель с другими разделителями и пишит на них хороший файл. а на остальные ругается что мало строк |
|||
13
Злопчинский
18.11.19
✎
16:44
|
(10) у тебя разделители строк что? РазделительСтрок (0D0A) или что-то иное - смотри в эту сторону.
|
|||
14
Злопчинский
18.11.19
✎
16:46
|
(10) и, главное, не тупи.
все как в (0) работает норм если вместо ; использовать таб. если тупняк страшный - кидай на почту или в скайп свой "проблемный" файл, вечером продемонстрирую что все рабтает норм (сейчас занят, ухожу на физо) |
|||
15
vova1122
18.11.19
✎
16:56
|
(10) Читаешь или не тот файл, или его формируешь не так как описал в (0)
Приведу кусок своего кода (правда для чтения текстового файла. Но это не отличается и для цсв (это такой же текстовый файл) Для цц=1 по 2 цикл Статус=?(цц=1,1,0); Файл=СоздатьОбъект("Текст"); Файлданих=?(цц=1,Файл1,Файл2); Файл.КодоваяСтраница(1); Файл.Открыть(Файлданих); СтрокВДокументе=файл.КоличествоСтрок(); Сообщить(Файлданих); НПП=0; для НПП=1 по СтрокВДокументе Цикл стр=файл.ПолучитьСтроку(НПП); |
|||
16
uno-group
18.11.19
✎
17:14
|
Процедура Оброботка(Файл);
ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"DialMail.dll"); Текст=СоздатьОбъект("AddIn.TextFile"); Текст.ОткрытьТФДляЧтения("D:\1с\Фа5\"+Файл); Пока Текст.ПрочитатьИзТФ(стр)=1 цикл //Текст=СоздатьОбъект("AddIn.V7TextFile"); //Текст.ОткрытьФайл("D:\1с\Фа5\"+Файл); //Текст.ВыбратьСтроки(); //Пока Текст.ПрочитатьСтроку(Стр)=1 Цикл к=к+1; Если К=1 Тогда Продолжить; КонецЕсли; // Текст=СоздатьОбъект("Текст"); // Текст.Открыть("D:\1с\Фа5\"+Файл); // Текст.КодоваяСтраница(0); //Если Текст.КоличествоСтрок()<2 Тогда // Предупреждение("Мало строк в: "+Файл ); // Возврат; //КонецЕсли; //Для к=2 По Текст.КоличествоСтрок() Цикл // Стр=СокрЛП(Текст.ПолучитьСтроку(К)); Сообщить(Файл+" "+Стр); Уже вроде все компоненты работы с текстом перепробывал. в файле 09:40:11 2019/11/18 00001 00019 00011 00018 00001 02019 00011 00018 00009 00040 00010 00002 0000001773 0000001773 04370 00000 00000 00000 09:44:43 2019/11/18 00002 00019 00011 00018 00001 02019 00011 00018 00009 00044 00042 00003 0000000030 0000001803 04370 00000 00000 00000 09:45:12 2019/11/18 00003 00019 00011 00018 00001 02019 00011 00018 00009 00045 00012 00005 0000000631 0000002434 04370 00000 00000 00000 В 1с в сообщить выводит. FA5_Date-2019-11-18_Time-11-09-09.csv яю0 FA5_Date-2019-11-18_Time-11-09-09.csv FA5_Date-2019-11-18_Time-11-09-09.csv FA5_Date-2019-11-18_Time-11-09-09.csv FA5_Date-2019-11-18_Time-11-09-09.csv FA5_Date-2019-11-18_Time-11-09-09.csv |
|||
17
uno-group
18.11.19
✎
17:15
|
текст в7текст сообщают аналогично. если екселем заменить разделитель на ; то все взлетает.
|
|||
18
vova1122
18.11.19
✎
17:35
|
(17) Какая разница какой разделитель. все читается именно так как прописано в текстовом файле
|
|||
19
vova1122
18.11.19
✎
17:52
|
ну или выложи свой файл с табуляциями и другим хламом куда нибудь. посмотрим что внутри.
|
|||
20
Злопчинский
18.11.19
✎
18:00
|
Перебери первую и единственную твою прочитанную строку, разбери её посимвольно и посмотри внимательно на коды символов
|
|||
21
Сияющий в темноте
18.11.19
✎
19:21
|
чего нужно сделать?
|
|||
22
Злопчинский
18.11.19
✎
21:16
|
Подумать за ТС. Сейчас до дому доберусь, гляну.
|
|||
23
Злопчинский
18.11.19
✎
22:06
|
Посмотрел. Определение проблемы заняло 5 мин, уменя комп дольше грузится.
у ТС файлы в "левой" кодировке, 77 такую кодировку штатноне понимает. Рецепт еще в (13) дан был. Если КоличествоСтрок возвращает 1 - очевидно, что 77 не видит "РазделителяСтрок" (энтер, Hex 0D0A). Смотрим файл Far'om или любым другим который позволяет смотреть не в символах, а в кодах видно что кодировка двухбайтовая, тот же самый энтер виден как 000D 000A, кодировка судя по всему 1200, UTF-16 Little endian. . и раз файл предполагается обрабатывать 1С - то для проверки его и надо открыть в 1С - сразу все видно, второй рецепт дан в (20) - получил бы "яю" - что сподвигло бы на дальнейшие рассуждения... https://content.screencast.com/users/Che66/folders/Jing/media/b6a01036-b868-4c9a-ade7-94d65896603c/2019-11-18_2204.png |
|||
24
Злопчинский
18.11.19
✎
22:07
|
Записал себе
ЧСВ = ЧСВ+1 . пошел читать книжку Андрея Кончаловского. |
|||
25
trad
18.11.19
✎
22:20
|
Еще после (1), по наличию БОМ, можно было понять что символы двубайтовые ))
|
|||
26
Сияющий в темноте
18.11.19
✎
22:26
|
семерка нулевой байт не любит и видит файл до него.
Scripting TextStream позволяет в 1с 7.7 работать с unicode. |
|||
27
Злопчинский
18.11.19
✎
22:30
|
(25) я вот нифига не понял как (1) связано с (0), поэтому тупо забил и размышлял далее без учета (0)
|
|||
28
uno-group
19.11.19
✎
10:08
|
Что проблема в левых символах было понятно сразу вопрос в том чем читать файл с этими символами. Ты не умничай ты пальцем покажи.
Всем спасибо особенно (26) за пинок в нужном направление. Все читается. FSO=СоздатьОбъект("Scripting.FileSystemObject"); File=FSO.OpenTextFile("D:\1с\Фа5\"+Файл,1,0,-1); Пока File.AtEndOfStream=0 Цикл стр=СокрЛП(File.ReadLine()); Сообщить(Файл+" "+Стр); КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |