Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / dbf ФАЙЛЫ / 19 сообщений из 19, страница 1 из 1
17.05.2011, 16:22
    #37265112
Александр GAGADDDOC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
Добрый день !
Извините за старый вопрос,
но пересмотрел вопросы и ответы по DBF на форуме (спасибо , krvsa)
пепрепробывав все, но так и не вышло.
Есть файлик DA191802_Rs.dbf из готовой структурой (шапка, кол. строк)
для записи данных нужно пропустить шапку и далее вписывать строки

ДЕЛАЮ ТАК
S file="C:\0\DA191802_Rs.dbf"
;Читаем шапку
O file:("R")
U file
R A ; ??? ТУТ ВЫСКАКИВАЕТ ОШИБКА
C file
;Далее пишем данные
O file:("NW")
U file
;тут цикл записи данных
С file



в MSM делали так
;Чтение заголовка
O 51:("DA000001.DBF":"r") U 51 R a#513 C 51
;Запись кол.строк (запись заголовка файла)
STR-кол.стр
S a=$C(STR#256)_$C(STR\256)
O 51:("DA000001.DBF":"w") U 51 W a
;тут цикл записи данных
;Выход
W $C(0) C 51
...
Рейтинг: 0 / 0
17.05.2011, 16:31
    #37265151
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
а что за ошибка?
...
Рейтинг: 0 / 0
17.05.2011, 16:37
    #37265169
Александр GAGADDDOC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
Не ошибка.
А программа ожидает ввода из клавиатуры. А ведь должна считаться 1 строка

ясно, что R в диалоге для ввода информации, а при чтении из файла....
...
Рейтинг: 0 / 0
17.05.2011, 16:43
    #37265191
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
Ну, собственно, пока проблема не в дбф файлах, а файлах вообще.
Может, название неверное, буквы русские, файл занят?
...
Рейтинг: 0 / 0
17.05.2011, 16:58
    #37265245
Александр GAGADDDOC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
Блин вроде должно быть прото, но не читает
установил закрытие файла перед открытием
S file="C:\0\DA191802_Rs.dbf" C file
S file="C:\0\DA191802_Rs.dbf" O file:("R") R a C file

файлик прикрепил

можна попробывать в ТЕРМИНАЛЕ
...
Рейтинг: 0 / 0
17.05.2011, 17:39
    #37265407
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
Возможно, файл блокирован внешней программой.
У меня все читается.

В терминале пробовать коварно, там нужно делать Read в той же строке, что и Use, так как с окончанием команды поток переключается на терминал, и если делать построчно в терминале, R A ждет ввода с терминала.

Кстати, флаги NW неправильные, нужны будут WU или WF, но не N, а то у вас старый файл сотрется.
...
Рейтинг: 0 / 0
17.05.2011, 17:51
    #37265459
Александр GAGADDDOC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
Да... привычка в терминале работать.
С П А С И Б О !!!!
...
Рейтинг: 0 / 0
17.05.2011, 20:39
    #37265823
Onix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
Александр GAGADDDOC,

S file="C:\0\DA191802_Rs.dbf" O file:("R") U file R a C file
не потеряли U file ??
...
Рейтинг: 0 / 0
18.05.2011, 08:46
    #37266297
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
Александр GAGADDDOC ,

Вариант с использованием Caché SQL Gateway (ODBC/JDBC) не рассматриваете?
...
Рейтинг: 0 / 0
18.05.2011, 11:04
    #37266564
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
Александр GAGADDDOCпепрепробывав все, но так и не вышло.
Т.е. моя программка не читает какой-то дбф-файл?
...
Рейтинг: 0 / 0
18.05.2011, 13:54
    #37267150
Александр GAGADDDOC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
Из Вашей программки взято много, но в программке есть переходы на иные программы
и поэтомо разобраться тяжеловато
I '$$Cache^ACACHE S prt=$$FOpen^ASYS(File,"RW")
Если можна помогите
ЗАДАЧА ТАКАЯ
Есть готовый файлик (ДЛЯ УПРОЩЕНИЯ) (шапка и одна строка)
нужно записать данные из Каше

Делаю так из DBF файлика беру шапку (по идее первую строку)
и пишу в переменную "а"
далее "а" пишу обратно в DBF файлик и далее пишу данные

S file="C:\0\DA191802_Rs.dbf" C file
S file="C:\0\DA191802_Rs.dbf" O file:("R") Use file
;читаю шапку
Read a
s ^A=a ;просто для проверки, что прочитало (что-то прочитало, но вроде не все данные)е
;Записываю шапку
W a
C file
O file:("WU") U file
тут цикл записи данных ... W DAN
C file

Программка проходит, но при окрытии готового DBF (ВИЕРОМ DBF) пишет файл запорченый

В MSM все просто, ТУТ что-то не идет
...
Рейтинг: 0 / 0
18.05.2011, 15:12
    #37267341
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
Александр GAGADDDOCИз Вашей программки взято много, но в программке есть переходы на иные программы
и поэтомо разобраться тяжеловато
Код: plaintext
I '$$Cache^ACACHE S prt=$$FOpen^ASYS(File,"RW")

Ну это не проблема... Вот та функция для Кащея

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
FOpen(File,Typ,Byte,Sym)  ; * Открыть файл *
 S Typ=$G(Typ,"WNS")
 S:Typ="W" Typ="WNS"
 S:Typ="R" Typ="RS"
 S Sym=$G(Sym)
 I $ZU( 68 , 40 , 1 )
 q:":\/"[$e(File,$l(File)) ""
 I Sym'="" O File:(Typ::Sym):0 Q:$T File Q ""
 O File:(Typ::""): 0 
 Q:$T File
 Q ""

Александр GAGADDDOCЕсли можна помогите
Доведи до ума программку и пользуйся...
...
Рейтинг: 0 / 0
18.05.2011, 15:14
    #37267352
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
Я тут где-то даже выкладывал вариант уже без "сторонних" программ. Если не нашел - вот он

текст программки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
Cache for Windows^INT^^~Format=Cache.S~
%RO on  22  Mar  2010     1 : 23  PM
dbf^INT^ 1 ^ 61807 , 48200 ^ 0 
dbf ;Кривошеев С.А.;Процедуры и функции для работы с файлами формата dbf;;[  22 / 03 / 2010   13 : 22  ]
TMPLOAD                                ; * Пример чтения записей *
 n
 S dbname=$NA(^F($J,"^dbf","Name"))
 s file="c:\box\tmp.dbf"
 s file=$$DbOpen(file)
 i file="" w !!,"Проблемы с открытием файла..." q
 f  s val=$$NextRec(file,"drec") q:val=""  d TMPREC
 c file
 q
TMPREC                                 ; показать запись
 w !
 zw drec
 h  1 
 q
TMPCRT                                 ; * Пример создания файла dbf *
 N
 S dbname=$NA(^F($J,"^dbf","Name"))
 S dbdata=$NA(^F($J,"^dbf","Data"))
 s file="\\ksa\box\tmp.dbf"
 K @dbname
 D TMPNEW
 S dbdev=$$DbOpen(file)
 K @dbdata
 D REPLACE("KFOSB","tmp")
 D REPLACE("SUM", 100 )
 D DBAPPEND()
 K @dbdata
 D REPLACE("KFOSB","tm1")
 D REPLACE("SUM", 200 )
 D DBAPPEND()
 C dbdev
 W !!,"Все."
 Q
TMPNEW                                 ; создание структуры
 N cas
 D ADDFLD("KFOSB", 3 )
 D ADDFLD("NLS", 10 )
 D ADDFLD("NLS_PRN", 22 )
 D ADDFLD("NLS_KFOSB", 3 )
 D ADDFLD("FIO", 40 )
 D ADDFLD("SUM", 12 ,"N", 2 )
 D ADDFLD("KNKEY", 10 )
 D ADDFLD("KOP", 3 ,"N")
 D ADDFLD("DOP", 3 ,"N")
 D ADDFLD("UDOST", 8 )
 D ADDFLD("IDN", 10 ,"N")
 D ADDFLD("N_PLAT", 6 )
 D ADDFLD("N_ORG", 3 )
 D ADDFLD("ERR", 60 )
 D ADDFLD("MASK", 1 )
 S cas=$$DbCreate(file,dbname)
 K @dbname
 W:cas !,"Фаил "_file_" создан!"
 W !!,"Все."
 Q
DBAPPEND(Dev,Data,Name)                ; * Добавить запись *
 N str,i,beg,allrec,var,file
 ; Dev  - номер открытого устройства
 ; Data - имя глобала данных записи
 ; Name - имя стркутурного глобала
 S Dev=$G(Dev,$G(dbdev))
 S Data=$G(Data,$G(dbdata))
 S Name=$G(Name,$G(dbname))
 S str=" "
 S i=""
 F  S i=$O(@Name@("Fields", 0 ,i)) Q:i=""  D VALFLD
 S file=@Name@("File")
 S allrec=@Name@("AllRec")
 S beg= 32 *(@Name@("AllFld")+ 1 )+ 1 
 S beg=beg+(@Name@("LenRec")*allrec)
 D USE(Dev,beg)
 W str_$C( 26 )
 S allrec=allrec+ 1 
 S @Name@("AllRec")=allrec
 D USE(Dev, 1 )
 S var=$zd($h, 3 )
 S var=$tr(var,"-")
 S $e(var, 1 , 2 )=""
 S var=$$DateSym(var)
 D W(var)
 S var=$$NSym(allrec)
 D W(var, 4 )
 Q
VALFLD                                 ; значение поля
 N fld
 S fld=@Name@("Fields", 0 ,i)
 D:'$D(@Data@(fld)) REPLACE(fld,,Data,Name)
 S str=str_@Data@(fld)
 Q
REPLACE(Fld,Val,Data,Name)             ; * Записать изменение поля *
 N typ,len,dec
 ; Data - имя глобала данных записи
 ; Name - имя стркутурного глобала
 S Val=$G(Val)
 S Data=$G(Data,$G(dbdata))
 S Name=$G(Name,$G(dbname))
 S typ=@Name@("Fields", 1 ,Fld,"Typ")
 S len=@Name@("Fields", 1 ,Fld,"Len")
 S dec=@Name@("Fields", 1 ,Fld,"Dec")
 I typ="L" S:Val= 1  Val="T" S:Val="" Val="F"
 S:typ="N" Val=$J(+Val,len,dec)
 S:typ="D" Val=$$DateVal(Val)
 S:typ="C" Val=$$PadR(Val,len)
 S Val=$E(Val, 1 ,len)
 S @Data@(Fld)=Val
 Q
DateVal(Val)                           ; Значение типа дата
 q:Val="" $j("", 8 )
 q:Val'["." Val
 q $$ConvData(Val)
NextRec(File,Data,Type,Del,Name)       ; * Прочитать следующую запись *
 n rec,data,dev,i,dn
 ; File - имя файла (или порта MSM)
 ; Data - имя переменной для записи данных по полям
 ; Type -  1  убрать пробелы справа,  2  слева,  3  справа и слева (если Data'="")
 ; Del  -  0  не читать удаленные записи,  1  читать
 ; Name - имя стркутурного глобала
 s Data=$g(Data)
 s Type=$g(Type, 3 )
 s Del=$g(Del, 0 )
 S Name=$G(Name,$G(dbname))
 s dev=$i
 s rec=$g(@Name@("Record"))+ 1 
NEXTREC                                ; Собственно чтение
 q:@Name@("AllRec")<rec ""
 D USE(File)
 r data#@Name@("LenRec")
 D USE(dev)
 s @Name@("Record")=rec
 s rec=rec+ 1  
 i 'Del,$e(data)="*" g NEXTREC
 s $e(data)=""
 s data=$$Upper(data)
 q:Data="" data
 s dn=$na(@Name@("Fields"))
 s i=""
 f  s i=$o(@dn@( 0 ,i)) q:i=""  d DATAFLD 
 q rec
DATAFLD                                ; записать значение поля
 n fld,val,l,typ
 s fld=@dn@( 0 ,i)
 s l=@dn@( 1 ,fld,"Len")
 s typ=@dn@( 1 ,fld,"Typ")
 s val=$e(data, 1 ,l)
 d:typ="D" DATE
 d:typ="N" NUMERIC
 d:typ="L" LOGICAL
 d SPACE
 s @Data@(fld)=val
 s data=$e(data,l+ 1 ,$l(data))
 q
LOGICAL                                ; логическое поле
 s val=$$At(val)
 i val="T" s val= 1  q
 s val= 0 
 q
NUMERIC                                ; числовое поле
 s val=$$At(val) 
 s val=+val
 s:val= 0  val=""
 q
SPACE                                  ; убрать пробелы
 q:typ'="C"
 i Type= 1  s val=$$Rt(val) q
 i Type= 2  s val=$$Lt(val) q
 i Type= 3  s val=$$At(val) q
 q
DATE                                   ; преобразование даты
 s val=$$ConvData(val)
 s:val[" " val=""
 q
DbOpen(File,Name)                      ; * Открыть DBF *
 N prt,var,allfld,dev,i,dn
 ; Name - имя стркутурного глобала
 S Name=$G(Name,$G(dbname))
 s Byte=$g(Byte, 16 )
 S dev=$I
 K @Name
 S prt=$$FOpen(File,"RWU")
 I prt="" D USE(dev) Q ""
 S @Name@("File")=File
 D LOADTIT
 S dn=$NA(@Name@("Fields"))
 F i= 1 : 1 :allfld D LOADFLD
 D USE(prt,@Name@("LenTit"))
 D USE(dev)
 Q prt
LOADFLD                                ; данные о поле
 N beg,var,fld,str
 S beg= 32 *i
 D USE(prt,beg)
 R str# 18 
 D USE(dev)
 S fld=$E(str, 1 , 11 )
 S fld=$p(fld,$C( 0 ))
 S @dn@( 0 ,i)=fld
 S @dn@( 1 ,fld,"Pos")=i
 S var=$E(str, 12 )
 S @dn@( 1 ,fld,"Typ")=var
 S var=$E(str, 17 )
 S var=$A(var)
 S @dn@( 1 ,fld,"Len")=var
 S var=$E(str, 18 )
 S var=$A(var)
 S @dn@( 1 ,fld,"Dec")=var
 Q
LOADTIT                                ; данные шапки
 N str
 D USE(prt, 4 )
 R str# 8 
 D USE(dev)
 S var=$E(str, 1 , 4 )
 S var=$$SymN(var)
 S @Name@("AllRec")=var
 S var=$E(str, 5 , 6 )
 S var=$$SymN(var)
 S @Name@("LenTit")=var
 S allfld=(var- 1 \ 32 )- 1 
 S @Name@("AllFld")=allfld
 S var=$E(str, 7 , 8 )
 S var=$$SymN(var)
 S @Name@("LenRec")=var
 Q
DbCreate(File,Name,Code)               ; * Создание файла формата dBASE III *
 N prt,dev,lentit,lenrec
 ; File - имя файла
 ; Name - имя стркутурного глобала
 ; Code - имя кодовой страницы
 s:$g(Code)="" Code="cp866"
 S dev=$I
 S prt=$$FOpen(File)
 D USE(dev)
 Q:prt=""  0 
 D DATA
 D USE(prt)
 D TITLE
 D WFLDS
 D USE(dev)
 C prt
 Q  1 
WFLDS                                  ; записать данные ополях
 N i
 S i=""
 F  S i=$O(@Name@(i)) Q:i=""  D WFLD
 D W($C($ZH("0D")))
 Q
WFLD                                   ;    записать поле
 N var
 S var=@Name@(i,"Fld")
 D W(var, 11 )
 S var=$G(@Name@(i,"Typ"),"C")
 D W(var)
 ; ? адрес данных поля в памяти
 D W(, 4 )
 S var=@Name@(i,"Len")
 S var=$$NSym(var)
 D W(var)
 S var=$G(@Name@(i,"Dec"), 0 )
 S var=$$NSym(var)
 D W(var)
 D W(, 14 )
 Q
DATA                                   ; сбор данных о структуре
 N i
 S i=$O(@Name@(""),- 1 )
 S lentit= 32 *(i+ 1 )+ 1 
 S lenrec= 0 
 S i=""
 F  S i=$O(@Name@(i)) Q:i=""  S lenrec=lenrec+@Name@(i,"Len")
 S lenrec=lenrec+ 1 
 Q
TITLE                                  ; титульные данные
 N dat,var
 S dat=$$Date()
 D W($C($ZH("03")))
 S var=$$ConvData(dat)
 S var=$$DateSym(var)
 D W(var, 3 )
 D W(, 4 )
 S var=$$NSym(lentit)
 D W(var, 2 )
 S var=$$NSym(lenrec)
 D W(var, 2 )
 D W(, 17 )
 s val=$$Code
 D W(val)
 D W(, 2 )
 Q
W(Str,Len,Sym)                         ; записать данные
 S Str=$G(Str)
 S Len=$G(Len,$L(Str))
 S Sym=$G(Sym,$C( 0 ))
 W $$PadR(Str,Len,Sym)
 Q
Code()                                 ; * Код кодовой страницы *
 q:Code="CP866" $c( 101 )
 q:Code="WINDOWS-1251" $c( 32 )
 q " "
ADDFLD(Fld,Len,Typ,Dec,Name)           ; * Добавить поле в структурный глобал *
 N i
 ; Fld  - имя поля
 ; Len  - длина
 ; Typ  - тип
 ; Dec  - количество знаков после запятой
 ; Name - имя стркутурного глобала
 S Typ=$G(Typ,"C")
 S:$g(Dec)="" Dec= 0 
 S Name=$G(Name,$G(dbname))
 S:Typ="D" Len=$S($G(Len)="": 8 , 1 :Len)
 S:Typ="M" Len= 10 
 S:Typ="L" Len= 1 
 S i=$O(@Name@(""),- 1 )+ 1 
 S @Name@(i,"Fld")=Fld
 S @Name@(i,"Len")=Len
 S @Name@(i,"Typ")=Typ
 S @Name@(i,"Dec")=Dec
 Q
DateSym(Date)                          ; * Дату в символы *
 N str,i,n
 S str=""
 S n=$L(Date)\ 2 
 F i= 1 : 1 :n S str=str_$C($E(Date,(i- 1 )* 2 + 1 ,i* 2 ))
 Q str
NSym(N)                                ; * Число в символы *
 N str,base,var
 S base= 256 
 S str=""
LABEL1                                 ; метка операции
 S var=N#base
 S str=str_$C(var)
 S N=N\base
 G:N'=0 LABEL1
 Q str
SymN(Str)                              ; * Символы в число *
 N n,base,l,i,k
 S base= 256 
 S n= 0 
 S l=$L(Str)
 S k= 1 
 F i= 1 : 1 :l D NEWSYM
 Q n
NEWSYM                                 ; очередной символ
 N var
 S var=$E(Str,i)
 S var=$A(var)
 S var=var*k
 S n=n+var
 S k=k*base
 Q
FOpen(File,Typ,Byte,Sym)               ; * Открыть файл *
 S Typ=$G(Typ,"WNS")
 S:Typ="W" Typ="WNS"
 S:Typ="R" Typ="RS"
 S Sym=$G(Sym)
 I $ZU( 68 , 40 , 1 )
 q:":\/"[$e(File,$l(File)) ""
 I Sym'="" O File:(Typ::Sym):0 Q:$T File Q ""
 O File:(Typ::""): 0 
 Q:$T File
 Q ""
FUse(File,Byte)                        ; * Использовать файл *
 S Byte=$G(Byte)
 I Byte="" U File Q File
 I Byte'="" U File:Byte Q File
 Q File
USE(Dev,Byte)                          ; * Активизировать устройство *
 S Dev=$G(Dev,$P)
 S Byte=$G(Byte)
 I Byte'="" U Dev:Byte Q
 U Dev
 Q
Upper(Str)                            ; Перевести строку в верхний регистр
 N str1,str2
 S str2="QWERTYUIOPASDFGHJKLZXCVBNMЙЦУКЕНГШЩЗХФЫВАПРОЛДЖЭЯЧСМИТЬБЮЪЁ"
 S str1="qwertyuiopasdfghjklzxcvbnmйцукенгшщзхфывапролджэячсмитьбюъё"
 Q $TR(Str,str1,str2)
PadR(Str,Len,Sym)                     ; Равнять справа строку Str до длины Len
                                      ; символами Sym. По умолчанию - пробелами
 S Len=$G(Len, 80 )
 Q $E(Str_$$Rs($G(Sym," "),Len), 1 ,Len)
ConvData(Data)                        ; Конвертация даты
                                      ;  12 . 01 . 95  ->  950112 
                                      ;  950112  ->  12 . 01 . 95 
 q:Data="" ""
 Q:Data["." $TR("AaGgBbCc","Cc.Bb.AaGg",Data)
 Q:$L(Data)= 6  $TR("Cc.Bb.Aa","AaBbCc",Data)
 Q $TR("Cc.Bb.AaGg","AaGgBbCc",Data)
At(S)                                 ; Убрать левые и правые пробелы
 Q $$Rt($$Lt(S))
Rt(Str)                               ; Убрать правые пробелы в Str
 N s,l
 S l=$L(Str),s=$J("",l)
 Q $E(Str, 0 ,$F(Str_s,s)-l- 1 )
Lt(Str)                               ; Убрать левые пробелы в Str
 Q $E(Str,$F(Str_".",$E($TR(Str_"."," ")))- 1 ,$L(Str))
Rs(Symbol,Num)                        ; Повторить Num раз символ Symbol
 N str
 S $P(str,Symbol,Num+ 1 )=""
 Q $G(str)
Date(Hor,Typ)
 n dat
 s:$g(Hor)="" Hor=$h
 s Typ=$g(Typ)
 s dat=$zd(Hor, 4 )
 s dat=$tr(dat,"/",".")
 s dat=$e(dat, 1 , 8 )
 q dat
...
Рейтинг: 0 / 0
18.05.2011, 16:21
    #37267614
Александр GAGADDDOC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
Шапку читает и записывает СПАСИБО !!!! ТЕПЕРЬ нужно правильно сформировать записываемою строку
если DBF файл имет такую структуру

NP-Numeric , ширина 5 после запятой 0
PERIOD-Numeric , ширина 1 после запятой 0
RIK-Numeric , ширина 4 после запятой 0
и так далее есть и другие типы полей.

Для формирования строки делаю
например
O file:("WU") U file
S NP=2
S PERIOD=0
S RIK=2011
S STR=$J(NP,5)_$J(PERIOD,1)_$J(RIK,4)
W STR

вопрос как правильно сфорировать строку ЗНАЯ ШАПКУ DBF
и какой символ разделяет строки в DBF
...
Рейтинг: 0 / 0
18.05.2011, 16:41
    #37267698
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
Пример чтения/записи в DBF напрямую:

  n
  
  #; читаем файл-шаблон
  do ##class(p6.Dbf).ReadFile("DA191802_Rs.dbf")

  /*
  структуру можно задать и вручную, например, так:
  set ^||dbf("header")=
  $lb(
    $lb("NP","N",5,0),
    $lb("PERIOD","N",1,0),
    $lb("RIK","N",4,0),
    $lb("KOD","C",10,0),
    $lb("TYP","N",1,0),
    $lb("TIN","C",10,0),
    $lb("S_NAR","N",12,2),
    $lb("S_DOX","N",12,2),
    $lb("S_TAXN","N",12,2),
    $lb("S_TAXP","N",12,2),
    $lb("OZN_DOX","N",3,0),
    $lb("D_PRIYN","D",8,0),
    $lb("D_ZVILN","D",8,0),
    $lb("OZN_PILG","N",2,0),
    $lb("OZNAKA","N",1,0)
  )
  */

  #; задаём одну строку с данными
  set ^||dbf("row",1)=$listbuild(1,2,3,"Код   ",4,"tin   ",5.1,6.2,7.3,8.4,9,$ZDH("2000-01-21",3),$ZDH("2010-12-31",3),10,9)
  
  #; записываем структуру и данные в новый файл
  do ##class(p6.Dbf).WriteFile("DA191802_Rs1.dbf")
  
  #; читаем и выводим содержимое и структуру вновь созданного файла
  do ##class(p6.Dbf).ReadFile("DA191802_Rs1.dbf")
  zw ^||dbf

Результат:
Код: plaintext
1.
2.
TEST>d ^dbf
^||dbf("header")=$lb($lb("NP","N",5,0),$lb("PERIOD","N",1,0),$lb("RIK","N",4,0),$lb("KOD","C",10,0),$lb("TYP","N",1,0),$lb("TIN","C",10,0),$lb("S_NAR","N",12,2),$lb("S_DOX","N",12,2),$lb("S_TAXN","N",12,2),$lb("S_TAXP","N",12,2),$lb("OZN_DOX","N",3,0),$lb("D_PRIYN","D",8,0),$lb("D_ZVILN","D",8,0),$lb("OZN_PILG","N",2,0),$lb("OZNAKA","N",1,0))
^||dbf("row",1)=$lb(1,2,3,"Код",4,"tin",5.1,6.2,7.3,8.4,9,58094,62091,10,9)

PS: класс p6.Dbf входит в комплект Прототипа-6 .
Я его доработал: использовал новые возможности Caché, исправил ошибки.
...
Рейтинг: 0 / 0
18.05.2011, 22:44
    #37268327
Игорь Сойников
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
Вот еще один класс примерный аналог p6
...
Рейтинг: 0 / 0
19.05.2011, 09:11
    #37268627
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
Александр GAGADDDOCвопрос как правильно сфорировать строку ЗНАЯ ШАПКУ DBF
Пример есть и в моей программке...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
TMPCRT                                 ; * Пример создания файла dbf *
 N
 S dbname=$NA(^F($J,"^dbf","Name"))
 S dbdata=$NA(^F($J,"^dbf","Data"))
 s file="\\ksa\box\tmp.dbf"
 K @dbname
 D TMPNEW
 S dbdev=$$DbOpen(file)
 K @dbdata
 D REPLACE("KFOSB","tmp")
 D REPLACE("SUM", 100 )
 D DBAPPEND()
 K @dbdata
 D REPLACE("KFOSB","tm1")
 D REPLACE("SUM", 200 )
 D DBAPPEND()
 C dbdev
 W !!,"Все."
 Q
TMPNEW                                 ; создание структуры
 N cas
 D ADDFLD("KFOSB", 3 )
 D ADDFLD("NLS", 10 )
 D ADDFLD("NLS_PRN", 22 )
 D ADDFLD("NLS_KFOSB", 3 )
 D ADDFLD("FIO", 40 )
 D ADDFLD("SUM", 12 ,"N", 2 )
 D ADDFLD("KNKEY", 10 )
 D ADDFLD("KOP", 3 ,"N")
 D ADDFLD("DOP", 3 ,"N")
 D ADDFLD("UDOST", 8 )
 D ADDFLD("IDN", 10 ,"N")
 D ADDFLD("N_PLAT", 6 )
 D ADDFLD("N_ORG", 3 )
 D ADDFLD("ERR", 60 )
 D ADDFLD("MASK", 1 )
 S cas=$$DbCreate(file,dbname)
 K @dbname
 W:cas !,"Фаил "_file_" создан!"
 W !!,"Все."
 Q
...
Рейтинг: 0 / 0
19.05.2011, 13:51
    #37269287
Александр GAGADDDOC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
СПАСИБА ЗА ПРОГРАММКУ dbf.rsa !!!!
Буду разбираться...

А пока сделали так сохранили данные в XLS (шапку набрали как в DBF)
затем сохранили в DBF
подредактировали файлик DBF прогой Navigator.exe - набрали нужную структуру
можна еще dbfHeaderEdit.exe (установить кол.строк)

и все...

можна ли дать прогу из ПРОТОТИПА
последнюю верисю скачал
...
Рейтинг: 0 / 0
19.05.2011, 19:11
    #37270223
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbf ФАЙЛЫ
Александр GAGADDDOCможна ли дать прогу из ПРОТОТИПА
последнюю верисю скачал2011.1 Unicode, Undefined=2, for current locale File=UTF8
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / dbf ФАЙЛЫ / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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