powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / dbf ФАЙЛЫ
19 сообщений из 19, страница 1 из 1
dbf ФАЙЛЫ
    #37265112
Александр GAGADDDOC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день !
Извините за старый вопрос,
но пересмотрел вопросы и ответы по 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
dbf ФАЙЛЫ
    #37265151
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что за ошибка?
...
Рейтинг: 0 / 0
dbf ФАЙЛЫ
    #37265169
Александр GAGADDDOC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не ошибка.
А программа ожидает ввода из клавиатуры. А ведь должна считаться 1 строка

ясно, что R в диалоге для ввода информации, а при чтении из файла....
...
Рейтинг: 0 / 0
dbf ФАЙЛЫ
    #37265191
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, собственно, пока проблема не в дбф файлах, а файлах вообще.
Может, название неверное, буквы русские, файл занят?
...
Рейтинг: 0 / 0
dbf ФАЙЛЫ
    #37265245
Александр GAGADDDOC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин вроде должно быть прото, но не читает
установил закрытие файла перед открытием
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
dbf ФАЙЛЫ
    #37265407
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, файл блокирован внешней программой.
У меня все читается.

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

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

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

Вариант с использованием Caché SQL Gateway (ODBC/JDBC) не рассматриваете?
...
Рейтинг: 0 / 0
dbf ФАЙЛЫ
    #37266564
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр GAGADDDOCпепрепробывав все, но так и не вышло.
Т.е. моя программка не читает какой-то дбф-файл?
...
Рейтинг: 0 / 0
dbf ФАЙЛЫ
    #37267150
Александр GAGADDDOC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из Вашей программки взято много, но в программке есть переходы на иные программы
и поэтомо разобраться тяжеловато
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
dbf ФАЙЛЫ
    #37267341
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр 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
dbf ФАЙЛЫ
    #37267352
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут где-то даже выкладывал вариант уже без "сторонних" программ. Если не нашел - вот он

текст программки
Код: 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
dbf ФАЙЛЫ
    #37267614
Александр GAGADDDOC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шапку читает и записывает СПАСИБО !!!! ТЕПЕРЬ нужно правильно сформировать записываемою строку
если 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
dbf ФАЙЛЫ
    #37267698
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример чтения/записи в 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
dbf ФАЙЛЫ
    #37268327
Игорь Сойников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще один класс примерный аналог p6
...
Рейтинг: 0 / 0
dbf ФАЙЛЫ
    #37268627
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр 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
dbf ФАЙЛЫ
    #37269287
Александр GAGADDDOC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СПАСИБА ЗА ПРОГРАММКУ dbf.rsa !!!!
Буду разбираться...

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

и все...

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


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