Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Формирование файла / 12 сообщений из 12, страница 1 из 1
04.05.2008, 10:23
    #35291651
Stind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование файла
Всем здравствуйте!
По хелпу не могу разобраться. Подскажите, плиз!

Нужна такая констракшн -
CREATE table c:\dat.dbf from array arr

но не могу просечь, как формировать массив arr...
Нужно формировать файл с опреленными полями (имена и длины меняются).
Например, должно быть поле "ОР" С 5 0 и штук 50 полей N 12 6 с именами из другого массива
...
Рейтинг: 0 / 0
04.05.2008, 10:54
    #35291704
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование файла
Читай HELP по функции и команде

AFIELDS()
COPY STRUCTURE EXTENDED

Для корректного формирования таблицы достаточно 6 первых столбцов массива или 6 первых полей таблицы-макета. Разумеется, если нет необходимости создавать поля Integer-AutoIncrement.
...
Рейтинг: 0 / 0
04.05.2008, 10:55
    #35291706
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование файла
AFIELDS(ArrayName [, nWorkArea | cTableAlias])
CREATE TABLE Mytable FROM ARRAY ArrayName
Или:
COPY STRUCTURE TO FileName
[FIELDS FieldList]
[[WITH] CDX | [WITH] PRODUCTION]
...
Рейтинг: 0 / 0
04.05.2008, 10:56
    #35291710
Stind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование файла
Всем спасибо, буду разбираться!
...
Рейтинг: 0 / 0
04.05.2008, 11:09
    #35291732
Stind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование файла
Наверно туплю... Или некорректно задал вопрос. Обе эти команды формируют файл, аналогичный по структуре исходному. У меня задача - формировать регулярно файл с некоторыми заданными полями из исходного файла. Для этой цели больше подходит COPY STRUCT, но как задать этот перечень (FieldList)? Можно, конечно, создать строку с перечнем полей через запятую и макросом добавить к команде, но если полей много - не будет ли слишком длинная строка? Может есть путь проще?
...
Рейтинг: 0 / 0
04.05.2008, 11:28
    #35291778
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование файла
Не совсем понятно, что надо сделать...
1. создать копию всей таблицы
2. создать копию части таблицы, т.е. только определенные поля
3. создать копию таблицы и добавить поля, которые отсутствуют в первой таблице
4. создать новую таблицу
...
Рейтинг: 0 / 0
04.05.2008, 12:03
    #35291828
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование файла
StindНаверно туплю... Или некорректно задал вопрос. Обе эти команды формируют файл, аналогичный по структуре исходному. У меня задача - формировать регулярно файл с некоторыми заданными полями из исходного файла. Для этой цели больше подходит COPY STRUCT, но как задать этот перечень (FieldList)? Можно, конечно, создать строку с перечнем полей через запятую и макросом добавить к команде, но если полей много - не будет ли слишком длинная строка? Может есть путь проще?
Оригинальный вопрос был:

StindНужна такая констракшн -
CREATE table c:\dat.dbf from array arr

но не могу просечь, как формировать массив arr...
В HELP по указанным командам описана СТРУКТУРА массива, который должен быть для корректной работы команды CREATE ... FROM ARRAY...

Вот и СОЗДАЙ массив нужной структуры и заполни его своими данными

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
* Массив
LOCAL laFields( 2 , 6 )

* Первое поле
laFields[ 1 , 1 ] = "OP"
laFields[ 1 , 2 ] = "C"
laFields[ 1 , 3 ] =  50 
laFields[ 1 , 4 ] =  0 
laFields[ 1 , 5 ] = .F.
laFields[ 1 , 6 ] = .F.

* Второе поле
laFields[ 2 , 1 ] = "F2"
laFields[ 2 , 2 ] = "N"
laFields[ 2 , 3 ] =  12 
laFields[ 2 , 4 ] =  6 
laFields[ 2 , 5 ] = .F.
laFields[ 2 , 6 ] = .F.

* Создание таблицы
CREATE TABLE c:\dat.dbf FREE FROM ARRAY laFields

Если таблица содержит поле Integer-AutoIncrement или должна быть включена в контейнер базы данных и иметь дополнительные триггера, правила, форматы полей, то заполняешь дополнительные столбцы.

Из массива, сформированного по AFIELDS() можешь взять описание структуры полей таблицы-образца.

В конце концов, можно создать таблицу просто выполнив запрос с "фиктивным" условием отбора. Чтобы в результирующую выборку не попало ни одной записи.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT ;
	CAST(space( 50 ) as C( 50 )) as OP, ;
	CAST( 0  as N( 12 , 6 )) as F2, ;
	field1,
	field2,
	field3,
FROM MyTable ;
INTO TABLE c:\dat.dbf ;
WHERE .F.
...
Рейтинг: 0 / 0
04.05.2008, 12:05
    #35291830
Stind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование файла
GoshaSНе совсем понятно, что надо сделать...
1. создать копию всей таблицы
2. создать копию части таблицы, т.е. только определенные поля
3. создать копию таблицы и добавить поля, которые отсутствуют в первой таблице
4. создать новую таблицу

Вариант 2.
В принципе, через макрос в команде сделал - работает. Но, опять же, не возникнет ситуации "слишком длинная строка"? Может есть способ погуманней?
...
Рейтинг: 0 / 0
04.05.2008, 12:07
    #35291837
Stind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование файла
2 ВладимирМ.

Вот как раз и не мог "втянуть" как формировать массив. Теперь ясно - спасибо!
...
Рейтинг: 0 / 0
04.05.2008, 12:10
    #35291843
Формирование файла
Stind GoshaS2. создать копию части таблицы, т.е. только определенные поля


Вариант 2.
В принципе, через макрос в команде сделал - работает. Но, опять же, не возникнет ситуации "слишком длинная строка"? Может есть способ погуманней?
А испробовать религия не позволяет? И каким боком тут создание новой структуры?
Обычный select <список полей> from <таблица>
...
Рейтинг: 0 / 0
04.05.2008, 12:24
    #35291884
Stind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование файла
проходящий. Stind GoshaS2. создать копию части таблицы, т.е. только определенные поля


Вариант 2.
В принципе, через макрос в команде сделал - работает. Но, опять же, не возникнет ситуации "слишком длинная строка"? Может есть способ погуманней?
А испробовать религия не позволяет? И каким боком тут создание новой структуры?
Обычный select <список полей> from <таблица>

<список полей> - это здорово. Но в программе много раз формируются файлы с разныи набором полей из исходного файла. Ручками это прописать нельзя. Вот вопрос и был как автоматизировать этот процесс.
...
Рейтинг: 0 / 0
04.05.2008, 12:29
    #35291896
Формирование файла
Stind<список полей> - это здорово. Но в программе много раз формируются файлы с разныи набором полей из исходного файла. Ручками это прописать нельзя. Вот вопрос и был как автоматизировать этот процесс.
Формаирование списка полей и формирование структуры - две совершенно разные вещи.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Формирование файла / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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