Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/LF и CR - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
LF и CR
Isanbet Дата: Пятница, 29.03.2013, 18:41 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Здравствуйте, уважаемые коллеги.

Столкнулся с такой проблемой. Есть отчёт, формируемый в формате .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 - Пятница, 29.03.2013, 18:42
 
Ответить
СообщениеЗдравствуйте, уважаемые коллеги.

Столкнулся с такой проблемой. Есть отчёт, формируемый в формате .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
Дата добавления - 29.03.2013 в 18:41
Serge_007 Дата: Пятница, 29.03.2013, 18:44 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
И чем помочь не видя ни примера (примера, а не оригинала) файла, ни макроса?
Разве что морально поддержать можно smile


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеИ чем помочь не видя ни примера (примера, а не оригинала) файла, ни макроса?
Разве что морально поддержать можно smile

Автор - Serge_007
Дата добавления - 29.03.2013 в 18:44
Isanbet Дата: Пятница, 29.03.2013, 18:47 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Меня интересует, как справиться с LF, пробелом, который по сути видно только в Notepade++, но видно, что именно об него он спотыкается. Как заменить на что-то читаемое - Replace не работает. Встречал упоминание, что может быть наследием unix-систем - файл вполне возможно формируется именно где-то на никсовом сервере.


С уважением
 
Ответить
СообщениеМеня интересует, как справиться с LF, пробелом, который по сути видно только в Notepade++, но видно, что именно об него он спотыкается. Как заменить на что-то читаемое - Replace не работает. Встречал упоминание, что может быть наследием unix-систем - файл вполне возможно формируется именно где-то на никсовом сервере.

Автор - Isanbet
Дата добавления - 29.03.2013 в 18:47
Isanbet Дата: Пятница, 29.03.2013, 18:56 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

А пример файла тут мало чем поможет. Это просто html-код, открытый в Notepade++ Только если включить View -> Show All Symbols, станут видны все пробелы - в том числе, что вместо LF CR там просто LF


С уважением
 
Ответить
СообщениеА пример файла тут мало чем поможет. Это просто html-код, открытый в Notepade++ Только если включить View -> Show All Symbols, станут видны все пробелы - в том числе, что вместо LF CR там просто LF

Автор - Isanbet
Дата добавления - 29.03.2013 в 18:56
Serge_007 Дата: Пятница, 29.03.2013, 18:59 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Цитата (Isanbet)
А пример файла тут мало чем поможет

Ну, Вам виднее. Ждите телепатов smile


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата (Isanbet)
А пример файла тут мало чем поможет

Ну, Вам виднее. Ждите телепатов smile

Автор - Serge_007
Дата добавления - 29.03.2013 в 18:59
KuklP Дата: Пятница, 29.03.2013, 18:59 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Может там не LF, а vbcrlf? Потому и не находит. Проверил, Replace прекрасно справляется с vblf.
[vba]
Код
[a1] = Replace([a1], vbLf, " ")
[/vba]
Только Replace имеет ограничение на длину обрабатываемой строки. Чуть больше 8000 символов.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Пятница, 29.03.2013, 19:02
 
Ответить
СообщениеМожет там не LF, а vbcrlf? Потому и не находит. Проверил, Replace прекрасно справляется с vblf.
[vba]
Код
[a1] = Replace([a1], vbLf, " ")
[/vba]
Только Replace имеет ограничение на длину обрабатываемой строки. Чуть больше 8000 символов.

Автор - KuklP
Дата добавления - 29.03.2013 в 18:59
Isanbet Дата: Пятница, 29.03.2013, 19:07 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

KuklP, я парсю .html-ку, там точно не vb-шная константа) Или я чего-то недопонимаю?

А может Replace вообще отказаться работать, если в неё загрузить массив больше 8 000 символов?


С уважением

Сообщение отредактировал Isanbet - Пятница, 29.03.2013, 19:07
 
Ответить
СообщениеKuklP, я парсю .html-ку, там точно не vb-шная константа) Или я чего-то недопонимаю?

А может Replace вообще отказаться работать, если в неё загрузить массив больше 8 000 символов?

Автор - Isanbet
Дата добавления - 29.03.2013 в 19:07
KuklP Дата: Пятница, 29.03.2013, 19:14 | Сообщение № 8
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
А мне откуда знать, я ее что, видел? Серж Вам написал, что надо сделать. Иначе гаданиям конца не будет.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеА мне откуда знать, я ее что, видел? Серж Вам написал, что надо сделать. Иначе гаданиям конца не будет.

Автор - KuklP
Дата добавления - 29.03.2013 в 19:14
KuklP Дата: Пятница, 29.03.2013, 19:25 | Сообщение № 9
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Хотя, попробовал на строке в 15000 знаков - заменил smile
[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]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеХотя, попробовал на строке в 15000 знаков - заменил smile
[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]

Автор - KuklP
Дата добавления - 29.03.2013 в 19:25
nerv Дата: Пятница, 29.03.2013, 23:02 | Сообщение № 10
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Если это html/xml документ, нет смысла парсить его весь. В нем можно получить доступ к любому элементу аналогично ячеек, листов, книг эксель.

Иными словами, этот подход
Цитата (Isanbet)
включает стандартные Open NameFile, While not EOF(NameFile), Line Input #NameFile, Stroka

неправильный


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Пятница, 29.03.2013, 23:05
 
Ответить
СообщениеЕсли это html/xml документ, нет смысла парсить его весь. В нем можно получить доступ к любому элементу аналогично ячеек, листов, книг эксель.

Иными словами, этот подход
Цитата (Isanbet)
включает стандартные Open NameFile, While not EOF(NameFile), Line Input #NameFile, Stroka

неправильный

Автор - nerv
Дата добавления - 29.03.2013 в 23:02
Isanbet Дата: Суббота, 30.03.2013, 05:22 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

nerv, да, метод Line Input загоняет весь документ в некоторую переменную. Если подскажете другой метод - было бы очень классно. К сожалению, отчёт плохо структурирован. В тегах нет классов, ID и т. п. Сидишь и извращаешься. В прошлом отчёте тоже самое было. Находишь строку, например, "итог за день", а чтоб собственно итог получить, нужно дать программе пройти ещё 3 строки (записывая номер) - если текущаястрока-записанная = 3, и в этот момент скопировать содержимое строки в переменную и избавить её от тегов.

Типа такого. Нужно найти в тексте строку "Итого за день", а потом с помощью описанной хитрой манипуляции, вытащить 10 000. Я пока другого способа не придумал.

<tr>
<td>Итог за день</td>
<td>Некоторая инфа типа количества чего-то</td>
<td>Некоторая инфа типа количества чего-то</td>
<td>10 000 рублей</td>


С уважением

Сообщение отредактировал Isanbet - Суббота, 30.03.2013, 05:28
 
Ответить
Сообщениеnerv, да, метод Line Input загоняет весь документ в некоторую переменную. Если подскажете другой метод - было бы очень классно. К сожалению, отчёт плохо структурирован. В тегах нет классов, ID и т. п. Сидишь и извращаешься. В прошлом отчёте тоже самое было. Находишь строку, например, "итог за день", а чтоб собственно итог получить, нужно дать программе пройти ещё 3 строки (записывая номер) - если текущаястрока-записанная = 3, и в этот момент скопировать содержимое строки в переменную и избавить её от тегов.

Типа такого. Нужно найти в тексте строку "Итого за день", а потом с помощью описанной хитрой манипуляции, вытащить 10 000. Я пока другого способа не придумал.

<tr>
<td>Итог за день</td>
<td>Некоторая инфа типа количества чего-то</td>
<td>Некоторая инфа типа количества чего-то</td>
<td>10 000 рублей</td>

Автор - Isanbet
Дата добавления - 30.03.2013 в 05:22
nerv Дата: Суббота, 30.03.2013, 11:42 | Сообщение № 12
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Могу написать код под вашу задачу, но для этого нужно видеть документ, с кот. вы работаете. Сразу скажу, услуга не бесплатная. Надумаете, стучите в личку.


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
СообщениеМогу написать код под вашу задачу, но для этого нужно видеть документ, с кот. вы работаете. Сразу скажу, услуга не бесплатная. Надумаете, стучите в личку.

Автор - nerv
Дата добавления - 30.03.2013 в 11:42
Isanbet Дата: Суббота, 30.03.2013, 17:16 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Nerv, спасибо, но код то у меня есть. Он работал на другом отчёте. Единственное отличие, которое я углядел - это эти пробелы. И ведь я даже в выборку документов макросу подсовывал тот, первый отчёт - и он его нормально пережёвывал


С уважением
 
Ответить
СообщениеNerv, спасибо, но код то у меня есть. Он работал на другом отчёте. Единственное отличие, которое я углядел - это эти пробелы. И ведь я даже в выборку документов макросу подсовывал тот, первый отчёт - и он его нормально пережёвывал

Автор - Isanbet
Дата добавления - 30.03.2013 в 17:16
ikki Дата: Суббота, 30.03.2013, 17:52 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
[offtop]
Цитата (Isanbet)
код то у меня есть

а вы не делаете разницы между нерабочим кодом и рабочим? wink [/offtop]


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщение[offtop]
Цитата (Isanbet)
код то у меня есть

а вы не делаете разницы между нерабочим кодом и рабочим? wink [/offtop]

Автор - ikki
Дата добавления - 30.03.2013 в 17:52
KuklP Дата: Суббота, 30.03.2013, 18:05 | Сообщение № 15
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Саш, да дело даже не в том:
Цитата (Serge_007)
И чем помочь не видя ни примера (примера, а не оригинала) файла, ни макроса?

Сразу же было сказано.
Цитата (Isanbet)
Помогите, пожалуйста, очень нужно к понедельнику - бухгалтерия рвёт и мечет.

А чем ближе к понедельнику, тем дороже будет biggrin
Isanbet, тут не форум гадалок. Не хотите ничего показывать - надейтесь на платную помощь(но и там Вам придется показывать все, что потребуют). Без примера на таких форумах делать в большинстве случаев нечего.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеСаш, да дело даже не в том:
Цитата (Serge_007)
И чем помочь не видя ни примера (примера, а не оригинала) файла, ни макроса?

Сразу же было сказано.
Цитата (Isanbet)
Помогите, пожалуйста, очень нужно к понедельнику - бухгалтерия рвёт и мечет.

А чем ближе к понедельнику, тем дороже будет biggrin
Isanbet, тут не форум гадалок. Не хотите ничего показывать - надейтесь на платную помощь(но и там Вам придется показывать все, что потребуют). Без примера на таких форумах делать в большинстве случаев нечего.

Автор - KuklP
Дата добавления - 30.03.2013 в 18:05
Isanbet Дата: Суббота, 30.03.2013, 19:09 | Сообщение № 16
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Код рабочий, он работает на другой html-ке (там документы выгружаются другой системой, соответственно другое формирование), я и даже добавил этот другой отчёт в папку с файлами для нового макроса - он его жуёт, бегает по строчкам. Проблему я конкретно озвучил - пробелы LF, Cr+Lf, вот с ними мне пока никто и не помог.

Если б я сказал, что не знаю, как присваивать значение ячейке, тоже просили бы полный код? biggrin


С уважением
 
Ответить
СообщениеКод рабочий, он работает на другой html-ке (там документы выгружаются другой системой, соответственно другое формирование), я и даже добавил этот другой отчёт в папку с файлами для нового макроса - он его жуёт, бегает по строчкам. Проблему я конкретно озвучил - пробелы LF, Cr+Lf, вот с ними мне пока никто и не помог.

Если б я сказал, что не знаю, как присваивать значение ячейке, тоже просили бы полный код? biggrin

Автор - Isanbet
Дата добавления - 30.03.2013 в 19:09
KuklP Дата: Суббота, 30.03.2013, 19:10 | Сообщение № 17
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
До свиданья.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеДо свиданья.

Автор - KuklP
Дата добавления - 30.03.2013 в 19:10
Serge_007 Дата: Суббота, 30.03.2013, 21:02 | Сообщение № 18
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Цитата (Isanbet)
Если б я сказал, что не знаю, как присваивать значение ячейке, тоже просили бы полный код?

Для тех кто в танке: Ваш код нафиг никому не нужен, от Вас всю тему просят ФАЙЛ-ПРИМЕР

Всего доброго.


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата (Isanbet)
Если б я сказал, что не знаю, как присваивать значение ячейке, тоже просили бы полный код?

Для тех кто в танке: Ваш код нафиг никому не нужен, от Вас всю тему просят ФАЙЛ-ПРИМЕР

Всего доброго.

Автор - Serge_007
Дата добавления - 30.03.2013 в 21:02
Isanbet Дата: Воскресенье, 31.03.2013, 14:08 | Сообщение № 19
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Действительно, до свидания. Надо было ограничиться вопросом "как заменить пробел lf на cr+lf", а не расписывать всю ситуацию с упоминанием о том, что я уже сделал для её решения.


С уважением
 
Ответить
СообщениеДействительно, до свидания. Надо было ограничиться вопросом "как заменить пробел lf на cr+lf", а не расписывать всю ситуацию с упоминанием о том, что я уже сделал для её решения.

Автор - Isanbet
Дата добавления - 31.03.2013 в 14:08
Hugo Дата: Воскресенье, 31.03.2013, 14:27 | Сообщение № 20
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
Я думаю тут нужно полностью менять Ваш рабочий макрос (что в общем выше уже сказано) - но без примера файла код писать никто не будет.
А в этом коде судя по описанию файл читается строка за строкой - и тут уже ничего не поделать. Или менять код, или менять файл.
И нечего обижаться - никто кроме Вас в ситуации не виноват.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеЯ думаю тут нужно полностью менять Ваш рабочий макрос (что в общем выше уже сказано) - но без примера файла код писать никто не будет.
А в этом коде судя по описанию файл читается строка за строкой - и тут уже ничего не поделать. Или менять код, или менять файл.
И нечего обижаться - никто кроме Вас в ситуации не виноват.

Автор - Hugo
Дата добавления - 31.03.2013 в 14:27
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!