Имя: Пароль:
1C
1C 7.7
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());
    Сообщить(Файл+"    "+Стр);
КонецЦикла;
AdBlock убивает бесплатный контент. 1Сергей