драма со счастливым концом
эпиграф:не то что бы это раздражало, но бесит!
прелюдия:началось все тихо и мирно, в рамках поисков решенияизвечного вопроса - что делать работы с большими файлами эхеля (Excel) я взялся написать кода и заодно посчупать незнакомый доселе струмент IntelliJ (вместо "стандартного" Ecplipse).
Направление мысли было - использовать POI и его вариант SAX, в таком сочетании обойтись только кодом на LS никак не получится (событийное управление через бридж LS2J, в моем понятии, не осуществимо).
Получил код, и надо отдать должное IDE (опробованной) - она мне показалась удобной (в части подсказок и рефакторинга, за что - спасибо разработчикам)
Сюжет в полном окрасе
Получили java код, кот. прекрасно работает в нативе, теперь нужно увязать с LS.
Вставляем код в ДД (домино дизайнер) компилицо, делаем обвязку, в кот. возвращаем массивы из java: String[] и Integer[] (можно и int[] но не суть)
со стрингом - все замечательно <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"получили его в Variant"</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'> public String[] getArrPathMap() {
//String[] res=new String[arrPathMap.size()];
//arrPathMap.toArray(res);
return arrPathMap.toArray(new String[0]);
}[/CODE]
казалось бы - все замечательно и можно жить, но возврат индексов от файлов (в виде массива - Integer)<!--shcode--><pre><code class='java'> public Integer[] getArrData(){
return arrdata.toArray(new Integer[0]);
}[/CODE]внезапно укладывает на лопатки нотусятину
WTF... звучит законный русский вопрос
пробуем<!--shcode--><pre><code class='java'>return new Integer[3]{1,2,3};[/CODE]все окейно - получаем свою адын (1)
чешем репу, меняем типы (на int и получаем напрямую arr(0)) и т.п., в случае в отдачей массива по-полной (весь список) получаем шванец, а случай<!--shcode--><pre><code class='java'> Integer[] ret=new Integer[arrmap.size()];
ret[0]=new Integer(arrmap.size());[/CODE]посылает меня нах, с это просьбой, в форме - java object is Null
тут меня высаживает конкретно
лезу выводить в IDE - размерчик-то...сантиметров 20 не считая з... 2,5 ляма элементов, тихо стекаю вспоминая недобрым словом разрабов нотусятины:
Ну и развязка - класть индексы в хэш (HashMap) кажный на свой файл (а была мысля в один массив пихать)
ЗЫЖ возврат массивов, в LS, из внешних источников (к коим относится и КОМ) может давать непредсказуемые ошибки, в случае превышения лимитов
см. отрывок с Владовским
эпиграф:не то что бы это раздражало, но бесит!
прелюдия:началось все тихо и мирно, в рамках поисков решения
Направление мысли было - использовать POI и его вариант SAX, в таком сочетании обойтись только кодом на LS никак не получится (событийное управление через бридж LS2J, в моем понятии, не осуществимо).
Получил код, и надо отдать должное IDE (опробованной) - она мне показалась удобной (в части подсказок и рефакторинга, за что - спасибо разработчикам)
Сюжет в полном окрасе
Получили java код, кот. прекрасно работает в нативе, теперь нужно увязать с LS.
Вставляем код в ДД (домино дизайнер) компилицо, делаем обвязку, в кот. возвращаем массивы из java: String[] и Integer[] (можно и int[] но не суть)
со стрингом - все замечательно <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"получили его в Variant"</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'> public String[] getArrPathMap() {
//String[] res=new String[arrPathMap.size()];
//arrPathMap.toArray(res);
return arrPathMap.toArray(new String[0]);
}[/CODE]
Код:
Property Get arrPathMap
Dim routineName As String
routineName="arrPathMap"
On Error GoTo ErrH
'your code here
arrPathMap=me.csvobj.getArrPathMap()
Quit:
Exit Property
ErrH:
Error Err, RaiseError
Resume Quit
End Property
return arrdata.toArray(new Integer[0]);
}[/CODE]внезапно укладывает на лопатки нотусятину
Код:
Dim arr As Variant
arr=csv.ArrMap()
Print {pos for element #0:} &CStr(arr(0).intValue())
пробуем<!--shcode--><pre><code class='java'>return new Integer[3]{1,2,3};[/CODE]все окейно - получаем свою адын (1)
чешем репу, меняем типы (на int и получаем напрямую arr(0)) и т.п., в случае в отдачей массива по-полной (весь список) получаем шванец, а случай<!--shcode--><pre><code class='java'> Integer[] ret=new Integer[arrmap.size()];
ret[0]=new Integer(arrmap.size());[/CODE]посылает меня нах, с это просьбой, в форме - java object is Null
тут меня высаживает конкретно
лезу выводить в IDE - размерчик-то...
мля, ну почему низя вывести это сообщение вместо непонятного поведения (падение или java...Null)?!Bounds of a dimension -32,768 to 32,767 (the range of values of the Integer data type)
Ну и развязка - класть индексы в хэш (HashMap) кажный на свой файл (а была мысля в один массив пихать)
ЗЫЖ возврат массивов, в LS, из внешних источников (к коим относится и КОМ) может давать непредсказуемые ошибки, в случае превышения лимитов
см. отрывок с Владовским
Ссылка скрыта от гостей
- как выбраться из капкана (см. там середину где-то)