К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Траблы с обработкой текстового файла в 7.7

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



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

и т.д.
4 - 10.01.2018 - 22:43
Цитата:
Сообщение от US1C Посмотреть сообщение
А вот так выглядят данные в блокноте:
С каких пор блокнот стал средством побайтного просмотра?

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

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

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

Файл откуда берется? Можно его живьем выложить, а не копипаст из блокнота?
Гость
5 - 10.01.2018 - 22:44
Ну вроде разобрался.
Файлы были созданы в Unicode.
6 - 10.01.2018 - 22:46
Цитата:
Сообщение от US1C Посмотреть сообщение
Файлы были созданы в Unicode.
Что и требовалось доказать.
Гость
7 - 10.01.2018 - 22:49
(4) Файлы являются выводом результата методов утилиты ком.строки wmic.
Выложил бы, да не понял как это можно сделать здесь?
8 - 10.01.2018 - 22:58
(7) Стандартным методом: закачать на любой файлообменник и выложить ссылку.

Если, конечно, нужда еще не отпала - ведь разобрался же?
Гость
9 - 10.01.2018 - 23:03
(8) В принципе понял, что 7-ка не любит Unicode и не стал с ним бодаться. Я пошел другим путем, с помощью параметра /RECORD вместо /OUTPUT получаю нужный файл в виндовой кодировке.
Спасибо за участие!
10 - 10.01.2018 - 23:09
Цитата:
Сообщение от US1C Посмотреть сообщение
В принципе понял, что 7-ка не любит Unicode и не стал с ним бодаться.
После 10 секунд поиска: https://helpf.pro/faq/view/495.html
Гость
11 - 11.01.2018 - 13:37
(10) Это все подошло бы, если бы получилось считать строки из файла. А они, к сожалению, возвращаются пустыми.
Я уже переделал обработку формирования файлов и считывание данных идет без запинки.
Гость
12 - 11.01.2018 - 14:57
(11)Посмотри в сторону FileSystemObject, много лет пользуюсь. И кодировку твою сьест и скорость по сравнению с 1с-ным объектом много выше, особенно на больших файлах
Гость
13 - 12.01.2018 - 00:03
(12) А можно пример кода для 1С? Файлы-то небольшие, от нескольких строк до нескольких десятков. Но их много - тысячи. Может быть и имеет смысл альтернативу использовать.
Гость
14 - 12.01.2018 - 08:23
Цитата:
Сообщение от Ткачик Посмотреть сообщение
Цитата: Сообщение от US1C В принципе понял, что 7-ка не любит Unicode и не стал с ним бодаться. После 10 секунд поиска: https://helpf.pro/faq/view/495.html
По указанной ссылке - неполная функция перекодировки в utf-8 и обратно - отсутствует перекодировка для символа "№", вопрос решён здесь:
https://infostart.ru/public/18816/
Гость
15 - 12.01.2018 - 08:31
14-perpetum >+ - там же есть добавление перекодировки и для символов украинской раскладки клавиатуры.
Гость
16 - 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();
Гость
17 - 12.01.2018 - 12:08
Там же - в тему примера от "Смахарба" есть ссылка - от нашего VZ ? :-) - цитирую оттуда:

nickVZ (nickVZ) 10 24.01.09 11:56
Для автора. Есть такой вполне даже штатный для виндов объект: ADODB.Stream. И у этого объекта есть параметр Charset, задающий кодировку.
Попробуй.
http://msdn.microsoft.com/en-us/library/ms808793.aspx
Гость
18 - 12.01.2018 - 19:02
(17) Спасибо!
Попробую и такой вариант.
Кстати, может быть в курсе, как в условии WQL-запроса передать символ "\"?
А то вариант WHERE ExecutablePath="c:\windows\svchost.exe" не канает - пишет ошибка в запросе.
Если вместо полного пути указать имя каталога или файла - ошибки не будет. Просто не найдет нужное соответствие. Я так понял, что засада в слэше.
Гость
19 - 12.01.2018 - 19:07
(18) P.S. Ошибки в условии нет.
Файл svchost.exe в конкретном случае находится в каталоге "c:\windows", а не в "c:\windows\system32".
Гость
20 - 12.01.2018 - 19:24
18-US1C >Ну, вообще-то ExecutablePath - каталог (путь исполнения запроса), а не конкретный файл....
Если убрать "svchost.exe" - работает?
Гость
21 - 12.01.2018 - 19:50
(20) Дело в том, что ExecutablePath является свойством алиаса Process и возвращает полный путь вместе с исполняемым файлом. Т.е. когда я получаю все процессы, там ExecutablePath="c:\windows\svchost.exe" у конкретного процесса. Но я хочу отсечь ненужные процессы.
Гость
22 - 12.01.2018 - 20:22
Где-то мне встречалось, что обращение к процессам формируется через "\\", а не через "\", как указатель обычного каталога (не каталога процесса).
- Как вариант:
ExecutablePath="c:\\windows\\svchost.exe"
ExecutablePath='c:\\windows\\svchost.exe'
- точно не помню... - с SQL, WQL не работал... :-)
Гость
23 - 12.01.2018 - 20:52
(22) Такой вариант пробовал - не прошло. Обратный слэш пробовал. Больше ничего на ум не приходит, чем можно заменить или "закавычить" слэши.
24 - 12.01.2018 - 22:07
Цитата:
Сообщение от US1C Посмотреть сообщение
Такой вариант пробовал - не прошло. Обратный слэш пробовал.
Только гуглить явно не пробовал - там синтаксис вообще другой:
https://social.technet.microsoft.com...um=winserverTS
http://www.cycotec.de/index.php/prog...xecutable-path

Получается, надо что-то вроде: WHERE "ExecutablePath LIKE '%c:\\windows\\svchost.exe%'"
Гость
25 - 13.01.2018 - 21:35
(24) Супер! Спасибо, дружище, работает.
Гость
26 - 13.01.2018 - 21:46
(24) Вторая ссылка вообще в тему. Убивает сразу 2-х зайцев. Потому как сначала я получаю ID-шники процессов, а потом посылаю команду на завершение нужного.
Еще раз спасибо.


К списку вопросов






Copyright ©, Все права защищены