Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Траблы с обработкой текстового файла в 7.7 (http://forums.kuban.ru/f1040/trably_s_obrabotkoj_tekstovogo_fajla_v_7_7_a-8573906.html)

US1C 10.01.2018 21:30

Траблы с обработкой текстового файла в 7.7
 
Ситуевина:
есть многострочные текстовые файлы, вся инфа на латинице.
В обработке создаю объект "Текст", открываю программно любой файл - КоличествоСтрок()=1 и ПолучитьСтроку(1)= "ая".
Пробовал на разных компах, платформа 7.70.027, в любой конфигурации.
Уже убился, не пойму где собака порылась?

Ткачик 10.01.2018 21:36

(0) Что-нибудь с кодировкой, надо бы посмотреть файл на байтовом уровне.

US1C 10.01.2018 22:19

(1) Кодировку пробовал и DOS и WIn.
В блокноте все нормально показывает с виндовыми шрифтами.
Попробовал обработать через AddIn.V7TextFile.
Те же яйца, вид сбоку. Единственный прогресс - определяет правильно количество строк в файле.
А выводит (по шаблону "№"+ном+"-я строка = "+СокрЛП(Стр)+"."):
№1-я строка = яю.
№2-я строка = .
№3-я строка = .
№4-я строка = .
№5-я строка = .
№6-я строка = .
№7-я строка = .
№8-я строка = .
№9-я строка = .
№10-я строка = .
и т.д.

US1C 10.01.2018 22:21

А вот так выглядят данные в блокноте:


BootDevice=\Device\HarddiskVolume1
BuildNumber=7601
BuildType=Multiprocessor Free
Caption=Microsoft Windows 7 Professional
CodeSet=1251
CountryCode=7
CreationClassName=Win32_OperatingSystem
CSCreationClassName=Win32_ComputerSystem
CSDVersion=Service Pack 1
CSName=HP
CurrentTimeZone=180
DataExecutionPrevention_32BitApplications=TRUE
DataExecutionPrevention_Available=TRUE
DataExecutionPrevention_Drivers=TRUE
DataExecutionPrevention_SupportPolicy=2

и т.д.

Ткачик 10.01.2018 22:43

[quote=US1C;45194000]А вот так выглядят данные в блокноте:[/quote] С каких пор блокнот стал средством [b]побайтного[/b] просмотра?

Например, заголовок из трех байт EF BB BF в начале файла с кодировкой UTF-8 виден в блокноте? А нифига!

Так что вперед, скачивать FAR и смотреть чудо-файл его вьювером в HEX-режиме.

Вангую, что там что-то не то с символом перевода строки - не все системы используют для этого комбинацию 0D 0A.

Файл откуда берется? Можно его живьем выложить, а не копипаст из блокнота?

US1C 10.01.2018 22:44

Ну вроде разобрался.
Файлы были созданы в Unicode.

Ткачик 10.01.2018 22:46

[quote=US1C;45194114]Файлы были созданы в Unicode.[/quote] Что и требовалось доказать.

US1C 10.01.2018 22:49

(4) Файлы являются выводом результата методов утилиты ком.строки wmic.
Выложил бы, да не понял как это можно сделать здесь?

Ткачик 10.01.2018 22:58

(7) Стандартным методом: закачать на любой файлообменник и выложить ссылку.

Если, конечно, нужда еще не отпала - ведь разобрался же?

US1C 10.01.2018 23:03

(8) В принципе понял, что 7-ка не любит Unicode и не стал с ним бодаться. Я пошел другим путем, с помощью параметра /RECORD вместо /OUTPUT получаю нужный файл в виндовой кодировке.
Спасибо за участие!

Ткачик 10.01.2018 23:09

[quote=US1C;45194178]В принципе понял, что 7-ка не любит Unicode и не стал с ним бодаться.[/quote] После 10 секунд поиска: [url]https://helpf.pro/faq/view/495.html[/url]

US1C 11.01.2018 13:37

(10) Это все подошло бы, если бы получилось считать строки из файла. А они, к сожалению, возвращаются пустыми.
Я уже переделал обработку формирования файлов и считывание данных идет без запинки.

USSR 11.01.2018 14:57

(11)Посмотри в сторону FileSystemObject, много лет пользуюсь. И кодировку твою сьест и скорость по сравнению с 1с-ным объектом много выше, особенно на больших файлах

US1C 12.01.2018 00:03

(12) А можно пример кода для 1С? Файлы-то небольшие, от нескольких строк до нескольких десятков. Но их много - тысячи. Может быть и имеет смысл альтернативу использовать.

perpetum 12.01.2018 08:23

[quote=Ткачик;45194190] Цитата: Сообщение от US1C В принципе понял, что 7-ка не любит Unicode и не стал с ним бодаться. После 10 секунд поиска: [url]https://helpf.pro/faq/view/495.html[/url] [/quote]
По указанной ссылке - неполная функция перекодировки в utf-8 и обратно - отсутствует перекодировка для символа "№", вопрос решён здесь:
[url]https://infostart.ru/public/18816/[/url]

perpetum 12.01.2018 08:31

14-perpetum >+ - там же есть добавление перекодировки и для символов украинской раскладки клавиатуры.

perpetum 12.01.2018 08:57

Любую перекодировку средствами Adodb предлагал "Смахарба".
Ниже - эксперимент от Смахарба - как бы пишет в utf-8, но впереди прописывает 3 лишних символа и в конце - символ конца строки, результат ещё нужно выкусывать.
Пример от "Смахарба":

Стрим = СоздатьОбъект("Adodb.Stream");
Стрим.Type = 2;
Стрим.Mode= 3;
Стрим.charset="utf-8";
Стрим.Open();
Стрим.WriteText(СокрЛП(Наименование),1);
Стрим.SaveToFile("c:\testread_.txt",2);
Стрим.Close();

perpetum 12.01.2018 12:08

Там же - в тему примера от "Смахарба" есть ссылка - от нашего VZ ? :-) - цитирую оттуда:

nickVZ (nickVZ) 10 24.01.09 11:56
Для автора. Есть такой вполне даже штатный для виндов объект: ADODB.Stream. И у этого объекта есть параметр Charset, задающий кодировку.
Попробуй.
[url]http://msdn.microsoft.com/en-us/library/ms808793.aspx[/url]

US1C 12.01.2018 19:02

(17) Спасибо!
Попробую и такой вариант.
Кстати, может быть в курсе, как в условии WQL-запроса передать символ "\"?
А то вариант WHERE ExecutablePath="c:\windows\svchost.exe" не канает - пишет ошибка в запросе.
Если вместо полного пути указать имя каталога или файла - ошибки не будет. Просто не найдет нужное соответствие. Я так понял, что засада в слэше.

US1C 12.01.2018 19:07

(18) P.S. Ошибки в условии нет.
Файл svchost.exe в конкретном случае находится в каталоге "c:\windows", а не в "c:\windows\system32".

perpetum 12.01.2018 19:24

18-US1C >Ну, вообще-то ExecutablePath - каталог (путь исполнения запроса), а не конкретный файл....
Если убрать "svchost.exe" - работает?

US1C 12.01.2018 19:50

(20) Дело в том, что ExecutablePath является свойством алиаса Process и возвращает полный путь вместе с исполняемым файлом. Т.е. когда я получаю все процессы, там ExecutablePath="c:\windows\svchost.exe" у конкретного процесса. Но я хочу отсечь ненужные процессы.

perpetum 12.01.2018 20:22

Где-то мне встречалось, что обращение к процессам формируется через "\\", а не через "\", как указатель обычного каталога (не каталога процесса).
- Как вариант:
ExecutablePath="c:\\windows\\svchost.exe"
ExecutablePath='c:\\windows\\svchost.exe'
- точно не помню... - с SQL, WQL не работал... :-)

US1C 12.01.2018 20:52

(22) Такой вариант пробовал - не прошло. Обратный слэш пробовал. Больше ничего на ум не приходит, чем можно заменить или "закавычить" слэши.

Ткачик 12.01.2018 22:07

[quote=US1C;45201519]Такой вариант пробовал - не прошло. Обратный слэш пробовал.[/quote] Только гуглить явно не пробовал - там синтаксис вообще другой:
[url]https://social.technet.microsoft.com/Forums/Lync/en-US/da502e55-06a8-4858-b7af-18bc21ebcc7a/wmic-executablepath-across-remote-machines?forum=winserverTS[/url]
[url]http://www.cycotec.de/index.php/programmieren/wmic/beispiele/133-kill-process-where-executable-path[/url]

Получается, надо что-то вроде: WHERE "ExecutablePath LIKE '%c:\\windows\\svchost.exe%'"

US1C 13.01.2018 21:35

(24) Супер! Спасибо, дружище, работает.

US1C 13.01.2018 21:46

(24) Вторая ссылка вообще в тему. Убивает сразу 2-х зайцев. Потому как сначала я получаю ID-шники процессов, а потом посылаю команду на завершение нужного.
Еще раз спасибо.


Текущее время: 13:07. Часовой пояс GMT +3.