:: Visual Foxpro, Foxpro for DOS
Re: Правильно ли я перегоняю файл в другой файл построчно?
негерой
Автор

Сообщений: 17
Дата регистрации: 11.05.2018
Божья_коровка
Имея под рукой VFP9 вам не нужен scan
причина проста. Как я знаю, SCAN...ENDSCAN пробегается по ВСЕМ СТРОКАМ в файле *.dbf, а мне в моей изначальной задаче нужно пробегаться не по всем строкам, а начиная со второй. Псевдокод:
Считали первую строку с файла src.dbf
КОЕ-ЧТО СДЕЛАЛИ С ПЕРВОЙ СТРОКОЙ
перегнали её в файл dst.dbf
Начало цикла
Пока все строки (начиная со второй) в файле src.dbf не кончились,
перегоняем их в файл dst.dbf
Конец цикла

Вот видно, что в цикле мы начинаем работать со стоками файла src.dbf, начиная СО ВТОРОЙ СТРОКИ, а не с первой. Потому-то я и ввёл переменную-счётчик, инкрементирую её в цикле и всякий раз сравниваю с общим количеством строк в файле src.dbf

++++++++++++++++++++++++++++++++++++++++++++

Подобные объяснения КРАЙНЕ НЕУМЕСТНЫ в первом посте, поскольку захламляют тему.



Исправлено 2 раз(а). Последнее : негерой, 12.01.19 14:37
Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Для этого есть варик

Scan rest

Начинает перебор не с начала таблицы, а с текущей записи.



Исправлено 2 раз(а). Последнее : Taran, 12.01.19 18:01
Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Ну и ежели всё-таки хочется через do while то

Go 2
Do while !eof()
... Что то делаем
Skip
Enddo

Т.е. внутри do whike...enddo не нужно делать GO.
Перебор записей делает skip.
Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
негерой
Автор

Сообщений: 17
Дата регистрации: 11.05.2018
Taran
Перебор записей делает skip.
просто изначально я отказался от SKIP-а, поскольку открывал-закрывал файлы и при открытии файла текущей оказывалась не та запись, куда пригнули SKIP-ом в последний раз, а первая, что ли. Но теперь, раз я знаю, что файлы необязательно постоянно открывать-закрывать, можно попробовать использовать SKIP.


Исправлено 1 раз(а). Последнее : негерой, 12.01.19 14:51
Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
Божья_коровка

Сообщений: 25720
Дата регистрации: 23.08.2001
Taran
Для есть варик
Scan rest

Начинает перебор не с начала таблицы, а с текущей записи.
Ага, есть такое. Побуду занудой и отошлю ТС опять к хелпу -

SCAN [NOOPTIMIZE] [Scope] [FOR lExpression1] [WHILE lExpression2]
[Commands]
[LOOP]
[EXIT]
ENDSCAN

Цитата:
Scope Задает просматриваемый диапазон записей. Будут анализироваться только записи, принадлежащие заданному диапазону. Диапазон определяется следующими предложениями: ALL, NEXT nRecords, RECORD nRecordNumber, и REST. Подробнее о предложениях диапазона см. Scope Clauses .

По умолчанию областью действия команды SCAN являются все записи (предложение ALL).


------------------
Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается...




Исправлено 1 раз(а). Последнее : Божья_коровка, 12.01.19 14:55
Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Ну это понятно.
И scan rest попробуй предварительно встав на вторую запись.
В твоей задаче scan более очевиден чем do while.
Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
негерой
КОЕ-ЧТО СДЕЛАЛИ С ПЕРВОЙ СТРОКОЙ

Так вот кто ворует мои яблоки... \m/

Не "кое-что сделали", а закриптовали/раскриптовали. Отсюда и "секретность" ТС.
Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Божья_коровка
Sawradym вообще молодчина!

Ээх был бы у меня компьютер, интернет и чуточка мозгов..
Я бы столько тут написал и навалил бы горы кода.
Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Taran
Ээх был бы у меня компьютер, интернет и чуточка мозгов..
Я бы столько тут написал и навалил бы горы кода.

Кагбы по мотивам...

- Да если б мне дали полтарелки супа, я бы весь зал...
Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
негерой
Автор

Сообщений: 17
Дата регистрации: 11.05.2018
Изначальная задача стоит так: есть файл src.dbf с несколькими полями. Одно поле POSTAV имеет в разных записях разные значения, например "Водоканал", "Канализация", "РУК", "Теплосервис". Ну то есть сколько-то тыщ записей с полем POSTAV, равным "Водоканал", сколько-то равным "РУК" ну и так далее.

Что важно, заранее мы НЕ ЗНАЕМ ни значения полей ни количество ЗНАЧЕНИЙ. Ну то есть можно обработать файл src.dbf и их узнать. Но не заранее.

Ну всё, файл src.dbf нужно разбить на столько подфайлов, сколько значений имеет поле POSTAV (4 файла в нашем случае) и каждую запись в соответствующий файл занести.

++++++++++++++++++++++++++++++++++++++++++++++++++

Алгоритм прост и единственен, по-моему. Сортируем src.dbf, считываем первую запись, заносим из неё значение поля POSTAV в строку-шаблон.

А потом цикл.
Пробегаемся по всем оставшимся записям в файле src.dbf и сравниваем их с шаблоном. Наблюдаем равенство- пихаем их в соответствующий подфайл. Не наблюдаем равенства- создаём другой подфайл, меняем шаблон, МЕНЯЕМ УСЛОВИЕ, и считываем дальше, пока до конца файла src.dbf не дойдём.

С помощью моих новых друзей я это реализовал уже, около трёх секунд работает.

++++++++++++++++++++++++++++++++++++++++++++++++++

Принципиально вряд ли что тут поменять можно. Разве что один синтаксический сахар на другой. Вот ненужные открытия-закрытия файлов действительно сильно тормозили работу.



Исправлено 2 раз(а). Последнее : негерой, 12.01.19 15:16
Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Про полтарелки не знаю...



Исправлено 1 раз(а). Последнее : Taran, 12.01.19 17:58
Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
негерой
Изначальная задача стоит так:
С этого и надо было начинать.
Все решается совсем иначе.
Ну это ежели интересно. А так работает - и так сойдёт.
Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
youtube.com

Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
негерой
Автор

Сообщений: 17
Дата регистрации: 11.05.2018
Taran
С этого и надо было начинать.
я не первый день на свете живу. Кто бы стал со мной возиться? И были бы правы.
Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
негерой
Taran
С этого и надо было начинать.
я не первый день на свете живу. Кто бы стал со мной возиться? И были бы правы.
И тем не менее именно при такой постановке вопроса вам уже давно бы накидали бы рабочий код без всех этих идиотских разборок и дилетантских способов решения элементарной задачи.
Пока я был свободен вы тут занимались закатом солнца вручную, а теперь я занят. Ждите когда кто-нить (может и я) накидает вам что-то похожее на нормальное решение вашей задачи вместо того бреда, что вы нагенерили.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/1 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
ssa
Пока я был свободен вы тут занимались закатом солнца вручную, а теперь я занят. Ждите когда кто-нить (может и я) накидает вам что-то похожее на нормальное решение вашей задачи вместо того бреда, что вы нагенерили.

Прям заинтриговал нехваткой времени на десяток строк кода.
Ждем'с.
Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
негерой
Изначальная задача стоит так: есть файл src.dbf с несколькими полями. Одно поле POSTAV имеет в разных записях разные значения, например "Водоканал", "Канализация", "РУК", "Теплосервис". Ну то есть сколько-то тыщ записей с полем POSTAV, равным "Водоканал", сколько-то равным "РУК" ну и так далее.
Что важно, заранее мы НЕ ЗНАЕМ ни значения полей ни количество ЗНАЧЕНИЙ. Ну то есть можно обработать файл src.dbf и их узнать. Но не заранее.

Ну всё, файл src.dbf нужно разбить на столько подфайлов, сколько значений имеет поле POSTAV (4 файла в нашем случае) и каждую запись в соответствующий файл занести.
Тривиально. И совсем не обязательно мудрить, пытаясь за 1 проход это всё сделать.
негерой
Алгоритм прост и единственен, по-моему
Именно что "по-моему"... И ничего "простого" в переключениях с одной выходной таблицы на другую нет. А позаписная обработка в ситуациях когда можно обрабатывать сразу весь массив данных (при том индекс позволяет внутренне фоксу НЕ читать каждый раз все записи из таблицы) - это неправильно.

Пример на курсорах, без особых проблем переделывается на TABLE - ну и создавать тестовую таблицу src вам не нужно.
CREATE CURSOR src (postav C(20), v1 I)
INSERT INTO src (postav, v1) VALUES ('Водоканал', 1)
INSERT INTO src (postav, v1) VALUES ('РУК', 2)
INSERT INTO src (postav, v1) VALUES ('Водоканал', 3)
INSERT INTO src (postav, v1) VALUES ('Водоканал', 4)
INSERT INTO src (postav, v1) VALUES ('РУК', 5)
INSERT INTO src (postav, v1) VALUES ('Водоканал', 6)
INSERT INTO src (postav, v1) VALUES ('Канализация', 7)
INSERT INTO src (postav, v1) VALUES ('Теплосервис', 8)
INSERT INTO src (postav, v1) VALUES ('РУК', 9)
INSERT INTO src (postav, v1) VALUES ('Водоканал', 10)
INSERT INTO src (postav, v1) VALUES ('Канализация', 11)
INSERT INTO src (postav, v1) VALUES ('Теплосервис', 12)
INSERT INTO src (postav, v1) VALUES ('РУК', 13)
INSERT INTO src (postav, v1) VALUES ('Водоканал', 14)
INDEX ON postav TAG postav
* Индекс ускорит работу, если записей много, но для логики решения он не обязателен,
* как и какое-либо предварительное упорядочение записей в исходной таблице.
SELECT DISTINCT postav FROM src INTO CURSOR NewFiles
SCAN ALL
SELECT * FROM src WHERE src.postav = NewFiles.postav INTO CURSOR ALLTRIM(NewFiles.postav) NOFILTER
BROWSE NOWAIT
ENDSCAN
P.S. Ну и да, имя файла, наверное, надо формировать как-то более сложно нежели просто ALLTRIM(NewFiles.postav) - тем более что имена с пробелами не годятся для алиасов курсоров, а имена со слэшами или там какими кавычками не подходят и для имён файлов в ОС - ну да это не касается уже собственно задачи разделения таблицы на части


------------------
WBR, Igor




Исправлено 1 раз(а). Последнее : Igor Korolyov, 12.01.19 19:26
Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
Божья_коровка

Сообщений: 25720
Дата регистрации: 23.08.2001
Игорь, сейчас ТС скажет - да не нужен мне ваш scan, и ваши select'ты Он хочет DO WHILE
Или напишет как мне -

негерой
Я перегоняю файл построчно. Не скопом, а по одной строке. По одной, понимаете?
Он по одной хочет


------------------
Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается...




Исправлено 1 раз(а). Последнее : Божья_коровка, 12.01.19 19:29
Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
Taran
Прям заинтриговал нехваткой времени на десяток строк кода.
Ждем'с.
Обойдетесь! Игорь вон уже накидал именно то, что и я подразумевал. Всего 4(четыре) строки, а не десяток. Это что минимально нужны, без всяких тормозящих визуализаций.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Правильно ли я перегоняю файл в другой файл построчно?
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
Божья_коровка
Игорь, сейчас ТС скажет - да не нужен мне ваш scan, и ваши select'ты Он хочет DO WHILE Или напишет как мне -

негерой
Я перегоняю файл построчно. Не скопом, а по одной строке. По одной, понимаете?
Он по одной хочет
Это его проблемы. Он мне напомнил персонажа, который пришел обучаться вождению автомобиля и на объяснения про руль и педали заявил: "мне не они нужны, покажите мне как колеса поворачивать".

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/1 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 11 (Гостей: 11)

© 2000-2024 Fox Club 
Яндекс.Метрика