Столкнулся с такой проблемой. Есть отчёт, формируемый в формате .html Отчёт формируется ежедневно и в количестве около 1 800 штук (число подразделений компании). Отчёт, к сожалению показать не могу - информация конфиденциальная, да и на работе сеть изолирована. Структура вроде обычная, в браузере просто и красиво. Задача - распарсить, доставая одну из строчек с итогом. Макрос примерный был набросан на другом отчёте (и ведь работал!) - включает стандартные Open NameFile, While not EOF(NameFile), Line Input #NameFile, Stroka - я тоже думал, что ничего проще нет. Скопипастил, подправил только имена добавляемых файлов и прописал путь.
Когда это не сработало, я начал работать в режиме отладчика с критическими точками и выяснил, что макрос, найдя первую строку, решает, что всё - конец файла - и уходит на конструкцию Close NameFile#, обозначающую по сути "закрыть этот и по совместительству, перейти на следующий файл". Стал я рыть этот чудо файл в Notapade++ и увидел, что в том отчёте, где мой макрос работал успешно - пробел представляет собой пару LF CR, а здесь только LF. Немного почитал в сети, решил, что это аналог chr(10),chr(13), нашёл vbCR,vbLF, юзал Replace, но без толку - после первой строки макрос объявляет "следующий".
Помогите, пожалуйста, очень нужно к понедельнику - бухгалтерия рвёт и мечет. Куча народу разбирает это дело вручную.
Здравствуйте, уважаемые коллеги.
Столкнулся с такой проблемой. Есть отчёт, формируемый в формате .html Отчёт формируется ежедневно и в количестве около 1 800 штук (число подразделений компании). Отчёт, к сожалению показать не могу - информация конфиденциальная, да и на работе сеть изолирована. Структура вроде обычная, в браузере просто и красиво. Задача - распарсить, доставая одну из строчек с итогом. Макрос примерный был набросан на другом отчёте (и ведь работал!) - включает стандартные Open NameFile, While not EOF(NameFile), Line Input #NameFile, Stroka - я тоже думал, что ничего проще нет. Скопипастил, подправил только имена добавляемых файлов и прописал путь.
Когда это не сработало, я начал работать в режиме отладчика с критическими точками и выяснил, что макрос, найдя первую строку, решает, что всё - конец файла - и уходит на конструкцию Close NameFile#, обозначающую по сути "закрыть этот и по совместительству, перейти на следующий файл". Стал я рыть этот чудо файл в Notapade++ и увидел, что в том отчёте, где мой макрос работал успешно - пробел представляет собой пару LF CR, а здесь только LF. Немного почитал в сети, решил, что это аналог chr(10),chr(13), нашёл vbCR,vbLF, юзал Replace, но без толку - после первой строки макрос объявляет "следующий".
Помогите, пожалуйста, очень нужно к понедельнику - бухгалтерия рвёт и мечет. Куча народу разбирает это дело вручную.Isanbet
С уважением
Сообщение отредактировал Isanbet - Пятница, 29.03.2013, 18:42
Меня интересует, как справиться с LF, пробелом, который по сути видно только в Notepade++, но видно, что именно об него он спотыкается. Как заменить на что-то читаемое - Replace не работает. Встречал упоминание, что может быть наследием unix-систем - файл вполне возможно формируется именно где-то на никсовом сервере.
Меня интересует, как справиться с LF, пробелом, который по сути видно только в Notepade++, но видно, что именно об него он спотыкается. Как заменить на что-то читаемое - Replace не работает. Встречал упоминание, что может быть наследием unix-систем - файл вполне возможно формируется именно где-то на никсовом сервере.Isanbet
А пример файла тут мало чем поможет. Это просто html-код, открытый в Notepade++ Только если включить View -> Show All Symbols, станут видны все пробелы - в том числе, что вместо LF CR там просто LF
А пример файла тут мало чем поможет. Это просто html-код, открытый в Notepade++ Только если включить View -> Show All Symbols, станут видны все пробелы - в том числе, что вместо LF CR там просто LFIsanbet
Хотя, попробовал на строке в 15000 знаков - заменил [vba]
Код
Sub rasst() Dim sURI As String Dim oHttp As Object Dim htmlcode As String, poz As Long Dim outstr As String sURI = "http://maps.googleapis.com/maps/api/geocode/json?latlng=55.743673,37.642525&sensor=false" On Error Resume Next Set oHttp = CreateObject("MSXML2.XMLHTTP") If Err.Number <> 0 Then Set oHttp = CreateObject("MSXML.XMLHTTPRequest") End If On Error GoTo 0 If oHttp Is Nothing Then Exit Sub End If oHttp.Open "GET", sURI, False oHttp.Send htmlcode = oHttp.responseText [a1] = htmlcode 'Stop [a1] = Replace([a1], vbLf, " ") End Sub
[/vba]
Хотя, попробовал на строке в 15000 знаков - заменил [vba]
Код
Sub rasst() Dim sURI As String Dim oHttp As Object Dim htmlcode As String, poz As Long Dim outstr As String sURI = "http://maps.googleapis.com/maps/api/geocode/json?latlng=55.743673,37.642525&sensor=false" On Error Resume Next Set oHttp = CreateObject("MSXML2.XMLHTTP") If Err.Number <> 0 Then Set oHttp = CreateObject("MSXML.XMLHTTPRequest") End If On Error GoTo 0 If oHttp Is Nothing Then Exit Sub End If oHttp.Open "GET", sURI, False oHttp.Send htmlcode = oHttp.responseText [a1] = htmlcode 'Stop [a1] = Replace([a1], vbLf, " ") End Sub
nerv, да, метод Line Input загоняет весь документ в некоторую переменную. Если подскажете другой метод - было бы очень классно. К сожалению, отчёт плохо структурирован. В тегах нет классов, ID и т. п. Сидишь и извращаешься. В прошлом отчёте тоже самое было. Находишь строку, например, "итог за день", а чтоб собственно итог получить, нужно дать программе пройти ещё 3 строки (записывая номер) - если текущаястрока-записанная = 3, и в этот момент скопировать содержимое строки в переменную и избавить её от тегов.
Типа такого. Нужно найти в тексте строку "Итого за день", а потом с помощью описанной хитрой манипуляции, вытащить 10 000. Я пока другого способа не придумал.
<tr> <td>Итог за день</td> <td>Некоторая инфа типа количества чего-то</td> <td>Некоторая инфа типа количества чего-то</td> <td>10 000 рублей</td>
nerv, да, метод Line Input загоняет весь документ в некоторую переменную. Если подскажете другой метод - было бы очень классно. К сожалению, отчёт плохо структурирован. В тегах нет классов, ID и т. п. Сидишь и извращаешься. В прошлом отчёте тоже самое было. Находишь строку, например, "итог за день", а чтоб собственно итог получить, нужно дать программе пройти ещё 3 строки (записывая номер) - если текущаястрока-записанная = 3, и в этот момент скопировать содержимое строки в переменную и избавить её от тегов.
Типа такого. Нужно найти в тексте строку "Итого за день", а потом с помощью описанной хитрой манипуляции, вытащить 10 000. Я пока другого способа не придумал.
<tr> <td>Итог за день</td> <td>Некоторая инфа типа количества чего-то</td> <td>Некоторая инфа типа количества чего-то</td> <td>10 000 рублей</td>Isanbet
С уважением
Сообщение отредактировал Isanbet - Суббота, 30.03.2013, 05:28
Могу написать код под вашу задачу, но для этого нужно видеть документ, с кот. вы работаете. Сразу скажу, услуга не бесплатная. Надумаете, стучите в личку.
Могу написать код под вашу задачу, но для этого нужно видеть документ, с кот. вы работаете. Сразу скажу, услуга не бесплатная. Надумаете, стучите в личку.nerv
Чебурашка стал символом олимпийских игр. А чего достиг ты? Тишина - самый громкий звук
Nerv, спасибо, но код то у меня есть. Он работал на другом отчёте. Единственное отличие, которое я углядел - это эти пробелы. И ведь я даже в выборку документов макросу подсовывал тот, первый отчёт - и он его нормально пережёвывал
Nerv, спасибо, но код то у меня есть. Он работал на другом отчёте. Единственное отличие, которое я углядел - это эти пробелы. И ведь я даже в выборку документов макросу подсовывал тот, первый отчёт - и он его нормально пережёвывалIsanbet
И чем помочь не видя ни примера (примера, а не оригинала) файла, ни макроса?
Сразу же было сказано.
Цитата (Isanbet)
Помогите, пожалуйста, очень нужно к понедельнику - бухгалтерия рвёт и мечет.
А чем ближе к понедельнику, тем дороже будет Isanbet, тут не форум гадалок. Не хотите ничего показывать - надейтесь на платную помощь(но и там Вам придется показывать все, что потребуют). Без примера на таких форумах делать в большинстве случаев нечего.
Саш, да дело даже не в том:
Цитата (Serge_007)
И чем помочь не видя ни примера (примера, а не оригинала) файла, ни макроса?
Сразу же было сказано.
Цитата (Isanbet)
Помогите, пожалуйста, очень нужно к понедельнику - бухгалтерия рвёт и мечет.
А чем ближе к понедельнику, тем дороже будет Isanbet, тут не форум гадалок. Не хотите ничего показывать - надейтесь на платную помощь(но и там Вам придется показывать все, что потребуют). Без примера на таких форумах делать в большинстве случаев нечего.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Код рабочий, он работает на другой html-ке (там документы выгружаются другой системой, соответственно другое формирование), я и даже добавил этот другой отчёт в папку с файлами для нового макроса - он его жуёт, бегает по строчкам. Проблему я конкретно озвучил - пробелы LF, Cr+Lf, вот с ними мне пока никто и не помог.
Если б я сказал, что не знаю, как присваивать значение ячейке, тоже просили бы полный код?
Код рабочий, он работает на другой html-ке (там документы выгружаются другой системой, соответственно другое формирование), я и даже добавил этот другой отчёт в папку с файлами для нового макроса - он его жуёт, бегает по строчкам. Проблему я конкретно озвучил - пробелы LF, Cr+Lf, вот с ними мне пока никто и не помог.
Если б я сказал, что не знаю, как присваивать значение ячейке, тоже просили бы полный код? Isanbet
Действительно, до свидания. Надо было ограничиться вопросом "как заменить пробел lf на cr+lf", а не расписывать всю ситуацию с упоминанием о том, что я уже сделал для её решения.
Действительно, до свидания. Надо было ограничиться вопросом "как заменить пробел lf на cr+lf", а не расписывать всю ситуацию с упоминанием о том, что я уже сделал для её решения.Isanbet
Я думаю тут нужно полностью менять Ваш рабочий макрос (что в общем выше уже сказано) - но без примера файла код писать никто не будет. А в этом коде судя по описанию файл читается строка за строкой - и тут уже ничего не поделать. Или менять код, или менять файл. И нечего обижаться - никто кроме Вас в ситуации не виноват.
Я думаю тут нужно полностью менять Ваш рабочий макрос (что в общем выше уже сказано) - но без примера файла код писать никто не будет. А в этом коде судя по описанию файл читается строка за строкой - и тут уже ничего не поделать. Или менять код, или менять файл. И нечего обижаться - никто кроме Вас в ситуации не виноват.Hugo