powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / filewrite, loop: кто знает, подскажите как...
15 сообщений из 15, страница 1 из 1
filewrite, loop: кто знает, подскажите как...
    #33024090
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
datawindow возврашает несколько тысяч рэкордов.
нужно пройтись по нему сверху вниз и каждую тысячу сохранить в .txt файле.

типа:
fileopen (file1)
FOR l_row = 1 TO dw_1.RowCount()
If Mod (l_row, 1000) <> 0 Then
filewrite(file1)
else
fileclose(file1)
//открываем новый файл ...
fileopen(file2)
FOR l_row = l_row to dw_1.RowCount()
if mod (l_row, 1000) <> 0 then
//пишем в него ещё тысячу...
end if
NEXT

Вижу, код не правильный, на какой бы козе к нему подьехать?

Спасибо



Туды её в качель...
...
Рейтинг: 0 / 0
filewrite, loop: кто знает, подскажите как...
    #33024114
gz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
gz
Гость
voronkВижу, код не правильный, на какой бы козе к нему подьехать?
Спасибо
Туды её в качель...
Фотку козы - на форум. Можно в качели. Тогда и аборигены подъедут
...
Рейтинг: 0 / 0
filewrite, loop: кто знает, подскажите как...
    #33024196
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voronkdatawindow возврашает несколько тысяч рэкордов.
нужно пройтись по нему сверху вниз и каждую тысячу сохранить в .txt файле.

Туды её в качель...
А не проще ли копировать/перемещать записи из DW в другой DW (следующую тысячу) и записывать через метод SaveAsAscii() ? Во всяком случае скорость и отсутствие багов будет гарантированно, а наличие кода минимально.
...
Рейтинг: 0 / 0
filewrite, loop: кто знает, подскажите как...
    #33024204
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Родина Вас не забудет.

gz voronkВижу, код не правильный, на какой бы козе к нему подьехать?
Спасибо
Туды её в качель...
Фотку козы - на форум. Можно в качели. Тогда и аборигены подъедут
...
Рейтинг: 0 / 0
filewrite, loop: кто знает, подскажите как...
    #33024209
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообшем то я, пока, почти так и зделал:
for l_row = 1 to dw_1.Rowcount
dw_1.RowsCopy(l_row, l_row, Primary!, dw_2, 1, Primary!)

if dw_2.Rowcount() = 1000 then
fileopen()
filewrite()
fileclose()
dw_2.Reset()
end if
next
if dw_2.rowcount() > 0 then
fileopen()
filewrite()
fileclose()
dw_2.Reset()
end if

SaveAsAscii не могу потому как в некоторых колонках хотят списифиский формат.

Спасибо всё равно.
Будем ешё мозговать



ASCRUS voronkdatawindow возврашает несколько тысяч рэкордов.
нужно пройтись по нему сверху вниз и каждую тысячу сохранить в .txt файле.

Туды её в качель...
А не проще ли копировать/перемещать записи из DW в другой DW (следующую тысячу) и записывать через метод SaveAsAscii() ? Во всяком случае скорость и отсутствие багов будет гарантированно, а наличие кода минимально.
...
Рейтинг: 0 / 0
filewrite, loop: кто знает, подскажите как...
    #33024247
dp_tnd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
voronkВообшем то я, пока, почти так и зделал:

SaveAsAscii не могу потому как в некоторых колонках хотят списифиский формат.


А не проще ли этот "списифиский формат" загнать в select и в DW получать поля приведенные к тексту? А уж потом SaveAsAscii или SaveAs

Это позволит избавится от проблем настройки Windows на разные локали (ПБ пишет разделитель десятичный в соответствии с локалью). Можно их на лету переключать, но зачем лишняя морока?

Так что очень рекомендую. Выигрыш по скорости и простоте реализации несомненный.
...
Рейтинг: 0 / 0
filewrite, loop: кто знает, подскажите как...
    #33025411
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно создать еще один ДВ, поставить ему эти специфические форматы, и юзать шаред ДВ, после чего SaveAs...
...
Рейтинг: 0 / 0
filewrite, loop: кто знает, подскажите как...
    #33025852
gz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
gz
Гость
А еще можно (если можно) без PowerBuilder на языке типа PL-SQL
...
Рейтинг: 0 / 0
filewrite, loop: кто знает, подскажите как...
    #33025922
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gzА еще можно (если можно) без PowerBuilder на языке типа PL-SQL ну тогда еще через Pro*C или используя OCI библиотеки
...
Рейтинг: 0 / 0
filewrite, loop: кто знает, подскажите как...
    #33026386
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о господи.... Вот это наглядный пример когда слишком много datawindow вредно :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
integer iFile

iFile = - 1 
FOR l_row =  1  TO dw_1.RowCount()
    If Mod (l_row,  1000 ) =  1  Then
       if iFile <> - 1  then FileClose( iFile )
       iFile = FileOpen('Output' + string(l_row/ 1000 ) + '.txt', LineMode!, Write!)
    end if

    FileWrite(iFile, dw_1.GetItemString(l_row, 'somefield'))
    // and so on for each field
NEXT
if iFile <> - 1  then FileClose( iFile )
А кое-кому не помешает вспомнить классические алгоритмы вместо таскания кучи данных по памяти между двумя dw :)
...
Рейтинг: 0 / 0
filewrite, loop: кто знает, подскажите как...
    #33026578
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, сила.
Я вообшем от качания между двумя dw.ми тоже отказался.
написал луп в лупе, т.е. сначала Round(rowcount()/1000, 1), получил количество "страниц" по 1000 каждая плюс, если остался, хвост.
Ну а потом первый луп по страницам, второй внутри по рекордам, тока кода больше чем в твоём примере.
Сейчас попробуем, спасибо тебе ещё, и всем остальным тоже.

White Owlо господи.... Вот это наглядный пример когда слишком много datawindow вредно :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
integer iFile

iFile = - 1 
FOR l_row =  1  TO dw_1.RowCount()
    If Mod (l_row,  1000 ) =  1  Then
       if iFile <> - 1  then FileClose( iFile )
       iFile = FileOpen('Output' + string(l_row/ 1000 ) + '.txt', LineMode!, Write!)
    end if

    FileWrite(iFile, dw_1.GetItemString(l_row, 'somefield'))
    // and so on for each field
NEXT
if iFile <> - 1  then FileClose( iFile )
А кое-кому не помешает вспомнить классические алгоритмы вместо таскания кучи данных по памяти между двумя dw :)
...
Рейтинг: 0 / 0
filewrite, loop: кто знает, подскажите как...
    #33026661
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlо господи.... Вот это наглядный пример когда слишком много datawindow вредно :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
integer iFile

iFile = - 1 
FOR l_row =  1  TO dw_1.RowCount()
    If Mod (l_row,  1000 ) =  1  Then
       if iFile <> - 1  then FileClose( iFile )
       iFile = FileOpen('Output' + string(l_row/ 1000 ) + '.txt', LineMode!, Write!)
    end if

    FileWrite(iFile, dw_1.GetItemString(l_row, 'somefield'))
    // and so on for each field
NEXT
if iFile <> - 1  then FileClose( iFile )
А кое-кому не помешает вспомнить классические алгоритмы вместо таскания кучи данных по памяти между двумя dw :)
Ну их эти классические алгоритмы :) DW будет сохранять всегда быстрее, кода меньше, а значит и ошибок.

А вообще по хорошему - кто мешает эти данные в текстовики средствами СУБД выгрузить ? Вот уж где скорость.
...
Рейтинг: 0 / 0
filewrite, loop: кто знает, подскажите как...
    #33028417
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl...спасибо всё работает, убрал свой, поставил твой.
Ребята, спасибо всем кто поучаствовал.
Вопрос снят.


Туды её в качель...
...
Рейтинг: 0 / 0
filewrite, loop: кто знает, подскажите как...
    #33028609
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSА вообще по хорошему - кто мешает эти данные в текстовики средствами СУБД выгрузить ? Вот уж где скорость.
Ну дык не всегда сервер базы находится на той же машине что и клиент. Велика будет юзеру радость если данные выгрузятся, но в недоступное для него место :)
А насчет выгрузки средствами DW - оно конечно всего одна команда... Но во первых, при использованием SaveAs() получишь формат полей по умолчанию (что не всегда совпадает с желаемым форматом). Во вторых, DW иногда имеет поля которые вообще не нужно выгружать. А в третьих, если внутри dw_1.SaveAs() все таки произойдет ошибка - прийдется долго и виртуозно матерится :)
...
Рейтинг: 0 / 0
filewrite, loop: кто знает, подскажите как...
    #33029014
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще та SaveAs() и SaveAsAscii() это довольно таки разные вещи. ;-)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / filewrite, loop: кто знает, подскажите как...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (8): Анонимы (6), Bing Bot, Yandex Bot 1 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]