Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP - > VB 6.0 / 16 сообщений из 16, страница 1 из 1
06.04.2004, 12:15
    #32470351
????????
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VFP - > VB 6.0
может кто-нибудь помочь - перевести вот это:

close all

use ? Alias workTable

* кількість записів (строк)
N = Reccount()

* дані для порівняння
L = 25

* счетчик
A = 1

* створюємо тимчасову таблицю, куда будуть прописуватись
* групи по три записи
* поле MatMiddle - середнє з 3-х цифр
* поле Num - ідентифікатор групи

CREATE TABLE tmp ;
(tovar c(50), Belki N(2,0), Zhiri N(2,0), uglevodi N(2,0), MatMiddle N(10,3), Num N(10,0))

select workTable

* беремо цикл

FOR I=1 TO N

* перехід до запису с номером І
GO I
* вирахування сумми білків, жирів та вуглеводів у даній строці
Math_Middle = (workTable.Belki + workTable.Zhiri + workTable.uglevodi) / 3
* вставка у тимчасову таблицю запису
INSERT INTO tmp (tovar, Belki, Zhiri, uglevodi, MatMiddle, Num) ;
VALUES (ALLTRIM(workTable.tovar), workTable.Belki, workTable.Zhiri, workTable.uglevodi, Math_Middle, a)

A = A + 1
ENDFOR

* вибираємо мінімальне розходження
* 1-ша строка такого селекту і буде з мінімальним розходженням...
SELECT ABS(L - MatMiddle) AS AA, Num FROM tmp WHERE MatMiddle <> 0 ORDER BY AA INTO CURSOR t2

* фіксуємо 1-шу строку курсору Т2
SELECT t2
GOTO TOP
GroupNumber = t2.num

* вибираємо з тимчасової таблиці з усіма групами
* записи с зафіксованою вище групою...
SELECT tovar, Belki, Zhiri, uglevodi FROM tmp WHERE NUM = GroupNumber INTO TABLE Result

в код для Вижуал Бейсика 6,0... там НЕ должны присутствовать таблицы, а массивы и файлы данных (текстовики я так понимаю...)
...
Рейтинг: 0 / 0
06.04.2004, 13:53
    #32470535
VFP - > VB 6.0
А чем не нравится FoxPro?
Перевести нельзя, так как в VB нет возможности непосредственно работать с таблицами и курсорами. Попробуйте поэкспериментировать с ADO.
...
Рейтинг: 0 / 0
06.04.2004, 14:03
    #32470562
????????
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VFP - > VB 6.0
FoxPro - нравится и даже очень - просто это задание для студентов - а им сказали ВБ... да тут и не надо таблиц... тут надо использовать текстовые файлы вместо таблиц... из них брать и в них писать...
Убеждать препода, что в фоксе это удобней - нет смысла - сами понимаете....
...
Рейтинг: 0 / 0
06.04.2004, 14:21
    #32470591
Crip
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VFP - > VB 6.0
Открой таблицы через ADO и работай из VB
...
Рейтинг: 0 / 0
06.04.2004, 14:28
    #32470618
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VFP - > VB 6.0
Проще переписать заново. Что требуется в результате-то?
...
Рейтинг: 0 / 0
06.04.2004, 14:41
    #32470656
NE_Dimon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VFP - > VB 6.0
При чем тут Фокс и ВБ? Ему нужен украинец.

DimonNE
...
Рейтинг: 0 / 0
06.04.2004, 14:46
    #32470668
????????
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VFP - > VB 6.0
Про Украинца сказано умно! Респект...

2 NNN

задание - выбрать из файла с Н записями одну, у которой среднее 3-х полей (жиры + белки + углеводы) наиболее близко к заданному значению L и только -то...
На фоксе - элементарно.. а вот хотят, чтобы в ВБ было... я же в ВБ не пишу...
...
Рейтинг: 0 / 0
06.04.2004, 15:48
    #32470834
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VFP - > VB 6.0
Так подойдет? База - ms sql, вместо RECNO() вводим id, в SELECT создается новая таблица, с параметрами для ADODB.Command возиться неохота. Проверил в ворде, вроде все работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim L As Variant
Dim conn As Object
Dim comm As Object
L =  25 
Set conn = CreateObject( "ADODB.Connection" )
conn.Open  "Provider=SQLOLEDB.1 ;Persist Security Info=False;User ID=sa;Password=password;" & _
 "Initial Catalog=DatabaseName;Data Source=ServerName" 
Set comm = CreateObject( "ADODB.Command" )
comm.ActiveConnection = conn
comm.CommandText =  "SELECT TOP 1  id, belki, zhiri, uglevodi, ABS(" & L & _
 "- (belki+zhiri+uglevodi)/3 ) AS mat_middle INTO Result FROM workTable ORDER BY mat_middle"
comm.Execute
Set comm = Nothing
conn.Close
Set conn = Nothing


2NE_Dimon

В принципе можно меня и так обозвать
...
Рейтинг: 0 / 0
06.04.2004, 16:00
    #32470863
????????
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VFP - > VB 6.0
2 NNN

спасибо конечно.. мне-бы подошло.. но...
не стОит мешать туда АДО.. ибо я очень подозреваю, что препод сам такой глубины знаний не достиг... это НЕ для технической специальности задача.. для гуманитариев.. вот представь себе филолог такой код приносит.. дак препод же со стула упадет...
А если серьезно - нужно абстрагироваться от Баз данных все есть текстовые файлы.. с ними танцевать надо... геморрой блин...
...
Рейтинг: 0 / 0
06.04.2004, 16:07
    #32470883
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VFP - > VB 6.0
Все понятно, плавали, знаем, Что называется, приходи вчера, точнее лет 8-10 назад.. Я уж и забыл, как в каком-нибудь QBasic'е файл считывать:( Хотя если два-три дня терпит, могу дома книжку поискать
...
Рейтинг: 0 / 0
06.04.2004, 16:27
    #32470933
????????
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VFP - > VB 6.0
2 NNN

это как тебе захочется... я написал ему, ей то есть на фоксе - если не нравится - хай себе переводит на ВБ - в конце-концов ЕЕ же учат этому самому ВБ... надо и ей чем-нибудь заняться... В-)))
...
Рейтинг: 0 / 0
07.04.2004, 00:02
    #32471354
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VFP - > VB 6.0
Короче, это выглядит примерно так.
Блок Declarations
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Type Record
   Tovar As String *  20 
   Belki As Single
   Zhiri As Single
   Uglevodi As Single
End Type
Dim CustRec As Record, ResRec As Record
Dim L As Single, Min As Single, Tmp  As Single
Dim I As Integer, N As Integer, NumFile As Integer

Программка, которая создает файл с данными (закомментировано то, как я проверял, лень было писать 25 строк DATA, кстати будет ли DATA работать в Вижуале - не уверен)
Код: 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.
Sub Test1()
L =  50 
N =  25 
NumFile = FREEFILE
OPEN  "c:\temp\worktabl.dat"  FOR RANDOM AS NumFile LEN = LEN(CustRec)
FOR i =  1  TO N
   READ CustRec.Tovar, CustRec.Belki, CustRec.Zhiri, CustRec.Uglevodi
   PUT NumFile, i, CustRec
NEXT
CLOSE NumFile
DATA  "Tovar 1 ", 100 , 100 , 100 
...
DATA  "Tovar 25 ", 200 , 200 , 200 
'NumFile = FreeFile
'Open  "c:\temp\worktabl.dat"  For Random As NumFile Len = Len(CustRec)
'Randomize Timer
'For I =  1  To N
'   CustRec.Tovar = "Tovar" + Str$(I)
'   CustRec.Belki =  1000  * Rnd
'   CustRec.Zhiri = 1000 * Rnd
'   CustRec.Uglevodi =  1000  * Rnd
'   Put NumFile, I, CustRec
'Next
'Close NumFile
'Call Test2
End Sub

Собственно сама программа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub Test2()
L =  50 
Min =  3 .4E+ 38 
NumFile = FreeFile
Open  "c:\temp\worktabl.dat"  For Random As NumFile Len = Len(CustRec)
N = Len(NumFile) / Len(CustRec)
For I =  1  To N
   Get NumFile, I, CustRec
   Tmp = Abs((CustRec.Belki + CustRec.Zhiri + CustRec.Uglevodi) /  3  - L)
   If Tmp < Min Then Min = Tmp: ResRec = CustRec
Next
Close NumFile
NumFile = FreeFile
Open  "c:\temp\Result.dat"  For Random As NumFile Len = Len(ResRec)
Put NumFile,  1 , ResRec
Close NumFile
End Sub

Any questions?
...
Рейтинг: 0 / 0
07.04.2004, 03:20
    #32471376
????????
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VFP - > VB 6.0
2 NNN

да уж не знаю как и благодарить!!!!!!
...
Рейтинг: 0 / 0
07.04.2004, 11:14
    #32471763
????????
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VFP - > VB 6.0
2 NNN

не пояснишь что сие значит

Min = 3.4E+38
.
.

Tmp = Abs((CustRec.Belki + CustRec.Zhiri + CustRec.Uglevodi) / 3 - L)
If Tmp < Min Then Min = Tmp

зачем такая переменная 3,4 * 10 в степени 38 и с ней сравнивается модуль разницы????
...
Рейтинг: 0 / 0
07.04.2004, 11:56
    #32471857
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VFP - > VB 6.0
Берем заведомо большое число (я там в книжке максимум для типа Single вычитал, округлил до десятых)
Код: plaintext
Min =  3 .4E+ 38 

Вычисляем разницу для текущей записи
Код: plaintext
Tmp = Abs((CustRec.Belki + CustRec.Zhiri + CustRec.Uglevodi) /  3  - L)

Если она меньше минимума, то присваиваем новое значение минимуму
и запоминаем значения записи
Код: plaintext
If Tmp < Min Then Min = Tmp : ResRec = CustRec 
...
Рейтинг: 0 / 0
07.04.2004, 12:16
    #32471897
????????
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VFP - > VB 6.0
вон оно что... просто сравниваться должно с L !!! которое в твоем примере = 50... т.е. среднее значение ищется наиболее близкое к L
но впрочем все понятно... еще раз спасибо!!!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP - > VB 6.0 / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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