Автор Тема: Cоздать массив данных из HTML Excel кода  (Прочитано 2841 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ViktorSPB [?]

  • Новичок
  • *
  • Сообщений: 109
  • Репутация: 0
    • Награды
Добрый день!
Прочитал похожие темы, но они решают вопрос для конкретного случая. Мне бы хотелось получить универсальный парсер, который создаст массив нужного размера.
Имеется код в строковой переменной. В нем интересующая часть:
(нажмите для показа/скрытия)
Необходимо сначала по
<TR id=tHeader>
<TD style="WHITE-SPACE: nowrap" align=center>Дата</TD>
<TD style="WHITE-SPACE: nowrap" align=center>Стоимость пая, руб.</TD>
<TD style="WHITE-SPACE: nowrap" align=center>Стоимость ЧА, руб.</TD></TR></THEAD>
определить, что столбцов 3, и присвоить им названия согласно данным (Дата, Стоимость пая, руб. и т.д.)
Далее посчитать кол-во 
<TR class=even>
Это будет кол-во строк. Таким образом, массив задать размером [кол-во строк +1(нулевая строка с названиями столбцов)][3]
Далее необходимо заполнить массив элементами
<TR class=even>
<TD>01.03.2012</TD>
<TD x:num="852.11">852.11</TD>
<TD x:num="695369.57">695 369.57</TD></TR>
причем последняя запись имеет вид
<TR class=even>
<TD>11.07.2007</TD>
<TD x:num="1023.31">1 023.31</TD>
<TD x:num="8.311109803E7">83 111 098.03</TD></TR></TBODY></TABLE></BODY></HTML>
Просто регулярными выражениями возникают нестыковки, по-скольку внешне данные оформлены похоже друг на друга, а имеет значение их расположение.

Пока я пишу скрипт, который по сути заносит всю эту строку в массив и обрабатываю. Конечно, это долго, но прикрутить рег.выражения не хватает навыков.
Помогите, пожалуйста, решить задачу.
Повторюсь, что столбцов может быть и не 3 как тут.. Буду признателен за решения или какие-нибудь блоки, которые хоть как то облегчат скрипт при помощи рег. выражений.

Русское сообщество AutoIt

Cоздать массив данных из HTML Excel кода
« Отправлен: Март 06, 2012, 13:37:42 »

Оффлайн ViktorSPB [?]

  • Новичок
  • *
  • Сообщений: 109

  • Автор темы
  • Репутация: 0
    • Награды
Re: Cоздать массив данных из HTML Excel кода
« Ответ #1, Отправлен: Март 07, 2012, 13:22:22 »
Вижу, что вопрос не актуален, но если у кого еще встанет такая проблема, предлагаю решение
Код: AutoIt [Выделить]
Func _StrTableArray($sString)
    Local $aDataArray = StringSplit($sString,@CR)
    Local $aHead = _ArrayFindAll($aDataArray,"<td align",0,0,0,1)
    Local $aValue = _ArrayFindAll($aDataArray,"<tr class=""even"">",0,0,0,1)
    Local $aTargetArray[UBound($aValue)+1][UBound($aHead)]
    Local $N,$M,$sTemp

   
    For $N = 0 to UBound($aHead)-1
        $aTargetArray[0][$N] = StringRegExpReplace($aDataArray[$aHead[$N]],'(.*?)>(.*?)<(.*?)$','$2',1)
    Next

    For $N = 0 to UBound($aValue)-1
        For $M = 0 to UBound($aHead)-1
            If $M = 0 Then
                $sTemp = StringRegExpReplace($aDataArray[$aValue[$N]+$M+1],'(.*?)>(.*?)<(.*?)$','$2',1)
                $aTargetArray[$N+1][$M] = $sTemp
            EndIf
            If $M <> 0 Then $aTargetArray[$N+1][$M] = StringRegExpReplace($aDataArray[$aValue[$N]+$M+1],'(.*?)"(.*?)"(.*?)$','$2',1)+0
        Next
    Next

    Return $aTargetArray
EndFunc
 


Русское сообщество AutoIt

Re: Cоздать массив данных из HTML Excel кода
« Ответ #1 Отправлен: Март 07, 2012, 13:22:22 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
3160 Просмотров
Последний ответ Февраль 11, 2011, 23:35:44
от zip-per
4 Ответов
5204 Просмотров
Последний ответ Февраль 24, 2011, 14:36:53
от Houl777
3 Ответов
4147 Просмотров
Последний ответ Июль 26, 2011, 21:23:13
от madmasles
9 Ответов
3927 Просмотров
Последний ответ Ноябрь 06, 2011, 13:11:19
от alexandr
3 Ответов
2884 Просмотров
Последний ответ Октябрь 07, 2012, 00:27:43
от valdur2000
2 Ответов
1947 Просмотров
Последний ответ Июнь 12, 2013, 00:09:47
от PACHOM
2 Ответов
2416 Просмотров
Последний ответ Май 22, 2014, 09:11:41
от atmel007
7 Ответов
2814 Просмотров
Последний ответ Октябрь 14, 2015, 14:39:19
от BuZZinga
1 Ответов
1888 Просмотров
Последний ответ Декабрь 21, 2015, 17:25:49
от ra4o
14 Ответов
2353 Просмотров
Последний ответ Ноябрь 11, 2016, 21:51:08
от Alofa