Траблы с обработкой текстового файла в 7.7 Ситуевина: есть многострочные текстовые файлы, вся инфа на латинице. В обработке создаю объект "Текст", открываю программно любой файл - КоличествоСтрок()=1 и ПолучитьСтроку(1)= "ая". Пробовал на разных компах, платформа 7.70.027, в любой конфигурации. Уже убился, не пойму где собака порылась? |
(0) Что-нибудь с кодировкой, надо бы посмотреть файл на байтовом уровне. |
(1) Кодировку пробовал и DOS и WIn. В блокноте все нормально показывает с виндовыми шрифтами. Попробовал обработать через AddIn.V7TextFile. Те же яйца, вид сбоку. Единственный прогресс - определяет правильно количество строк в файле. А выводит (по шаблону "№"+ном+"-я строка = "+СокрЛП(Стр)+"."): №1-я строка = яю. №2-я строка = . №3-я строка = . №4-я строка = . №5-я строка = . №6-я строка = . №7-я строка = . №8-я строка = . №9-я строка = . №10-я строка = . и т.д. |
А вот так выглядят данные в блокноте: 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 и т.д. |
[quote=US1C;45194000]А вот так выглядят данные в блокноте:[/quote] С каких пор блокнот стал средством [b]побайтного[/b] просмотра? Например, заголовок из трех байт EF BB BF в начале файла с кодировкой UTF-8 виден в блокноте? А нифига! Так что вперед, скачивать FAR и смотреть чудо-файл его вьювером в HEX-режиме. Вангую, что там что-то не то с символом перевода строки - не все системы используют для этого комбинацию 0D 0A. Файл откуда берется? Можно его живьем выложить, а не копипаст из блокнота? |
Ну вроде разобрался. Файлы были созданы в Unicode. |
[quote=US1C;45194114]Файлы были созданы в Unicode.[/quote] Что и требовалось доказать. |
(4) Файлы являются выводом результата методов утилиты ком.строки wmic. Выложил бы, да не понял как это можно сделать здесь? |
(7) Стандартным методом: закачать на любой файлообменник и выложить ссылку. Если, конечно, нужда еще не отпала - ведь разобрался же? |
(8) В принципе понял, что 7-ка не любит Unicode и не стал с ним бодаться. Я пошел другим путем, с помощью параметра /RECORD вместо /OUTPUT получаю нужный файл в виндовой кодировке. Спасибо за участие! |
[quote=US1C;45194178]В принципе понял, что 7-ка не любит Unicode и не стал с ним бодаться.[/quote] После 10 секунд поиска: [url]https://helpf.pro/faq/view/495.html[/url] |
(10) Это все подошло бы, если бы получилось считать строки из файла. А они, к сожалению, возвращаются пустыми. Я уже переделал обработку формирования файлов и считывание данных идет без запинки. |
(11)Посмотри в сторону FileSystemObject, много лет пользуюсь. И кодировку твою сьест и скорость по сравнению с 1с-ным объектом много выше, особенно на больших файлах |
(12) А можно пример кода для 1С? Файлы-то небольшие, от нескольких строк до нескольких десятков. Но их много - тысячи. Может быть и имеет смысл альтернативу использовать. |
[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] |
14-perpetum >+ - там же есть добавление перекодировки и для символов украинской раскладки клавиатуры. |
Любую перекодировку средствами Adodb предлагал "Смахарба". Ниже - эксперимент от Смахарба - как бы пишет в utf-8, но впереди прописывает 3 лишних символа и в конце - символ конца строки, результат ещё нужно выкусывать. Пример от "Смахарба": Стрим = СоздатьОбъект("Adodb.Stream"); Стрим.Type = 2; Стрим.Mode= 3; Стрим.charset="utf-8"; Стрим.Open(); Стрим.WriteText(СокрЛП(Наименование),1); Стрим.SaveToFile("c:\testread_.txt",2); Стрим.Close(); |
Там же - в тему примера от "Смахарба" есть ссылка - от нашего VZ ? :-) - цитирую оттуда: nickVZ (nickVZ) 10 24.01.09 11:56 Для автора. Есть такой вполне даже штатный для виндов объект: ADODB.Stream. И у этого объекта есть параметр Charset, задающий кодировку. Попробуй. [url]http://msdn.microsoft.com/en-us/library/ms808793.aspx[/url] |
(17) Спасибо! Попробую и такой вариант. Кстати, может быть в курсе, как в условии WQL-запроса передать символ "\"? А то вариант WHERE ExecutablePath="c:\windows\svchost.exe" не канает - пишет ошибка в запросе. Если вместо полного пути указать имя каталога или файла - ошибки не будет. Просто не найдет нужное соответствие. Я так понял, что засада в слэше. |
(18) P.S. Ошибки в условии нет. Файл svchost.exe в конкретном случае находится в каталоге "c:\windows", а не в "c:\windows\system32". |
18-US1C >Ну, вообще-то ExecutablePath - каталог (путь исполнения запроса), а не конкретный файл.... Если убрать "svchost.exe" - работает? |
(20) Дело в том, что ExecutablePath является свойством алиаса Process и возвращает полный путь вместе с исполняемым файлом. Т.е. когда я получаю все процессы, там ExecutablePath="c:\windows\svchost.exe" у конкретного процесса. Но я хочу отсечь ненужные процессы. |
Где-то мне встречалось, что обращение к процессам формируется через "\\", а не через "\", как указатель обычного каталога (не каталога процесса). - Как вариант: ExecutablePath="c:\\windows\\svchost.exe" ExecutablePath='c:\\windows\\svchost.exe' - точно не помню... - с SQL, WQL не работал... :-) |
(22) Такой вариант пробовал - не прошло. Обратный слэш пробовал. Больше ничего на ум не приходит, чем можно заменить или "закавычить" слэши. |
[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%'" |
(24) Супер! Спасибо, дружище, работает. |
(24) Вторая ссылка вообще в тему. Убивает сразу 2-х зайцев. Потому как сначала я получаю ID-шники процессов, а потом посылаю команду на завершение нужного. Еще раз спасибо. |
Текущее время: 13:07. Часовой пояс GMT +3. |