Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
28 / 28 / 5
Регистрация: 24.03.2013
Сообщений: 238

Переписать функцию из FoxPro на C#

12.09.2014, 04:54. Показов 2323. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Помогите переписать функцию из FoxPro на C#. Сам застрял на этом: ASC(SUBSTR(itemkey, i, 1))>ASC('f')

Код на FoxPro

Code
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
FUNCTION demixItemKey
 LPARAMETERS itemid, itemkey
 ON ERROR e=1
 DIMENSION word[15]
 FOR i = 1 TO 15
    word[i] = ''
 ENDFOR
 j = 1
 FOR i = 1 TO LEN(itemkey)
    IF ASC(SUBSTR(itemkey, i, 1))>ASC('f')
       j = j+1
    ELSE
       word[j] = word(j)+SUBSTR(itemkey, i, 1)
    ENDIF
 ENDFOR
 wd = ''
 FOR i = 1 TO j
    wd = wd+word(IIF(MOD(VAL(itemid), 2)=0, j+1-i, i))
 ENDFOR
 r = ''
 FOR k = 0 TO LEN(wd)
    IF MOD(k, 3)=0
       r = r+SUBSTR(wd, k+1, 1)
    ENDIF
 ENDFOR
 ON ERROR
 RETURN r
ENDFUNC
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.09.2014, 04:54
Ответы с готовыми решениями:

Что лучше: Visual FoxPro или обычного FoxPro?
Подскажите, пожайлуста, какие bd лучше использовать в VB - Visual FoxPro или обычного FoxPro?!!

как задать фильтр по дате в foxpro for dos используя функцию ctod()
как задать фильтр по дате в foxpro for dos используя функцию ctod() и соответственно удалить записи отвечающие условиям фильтра ...

Переписать в функцию
Как переписать данный код в функцию ?Как сделать ,чтобы программа выполняла те же действия только при помощи функции? #include...

6
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
12.09.2014, 11:33
z668, в данную функцию передаются два параметра: itemid и itemkey
приведите несколько тестовых примеров, что передаётся на вход данной функции...

Цитата Сообщение от z668 Посмотреть сообщение
ASC(SUBSTR(itemkey, i, 1))>ASC('f')
если код очередного (i-го) символа строки itemkey больше, чем код символа 'f' - увеличить счётчик слов j
1
28 / 28 / 5
Регистрация: 24.03.2013
Сообщений: 238
12.09.2014, 13:56  [ТС]
Sergio Leone, благодарю, пример входных данных:

itemid=406328539
itemkey=6ef27b939319q8fc10aq7010e8q9ea57 fa66qf3d1b3a0618dq46ede6fd806033b9d3e665 f7caeq28e110ea0dcfq291d938b77fe

Теперь проблема на этой строке: wd = wd+word(IIF(MOD(VAL(itemid), 2)=0, j+1-i, i))

p.s. блин, какая же убогая документация по FoxPro, везде одни ошметки, не могу найти описание MOD, IIF. Примеры как таковые практически отсутствуют.

Добавлено через 54 минуты
В общем получилось примерно следующее:

C#
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
private string demixItemKey(string itemid, string itemkey)
        {
            string[] Arr = new string[14];
 
            int j = 1;
 
            string sim = "f";
 
            for (int i = 0; i < itemkey.Length; i++)
            {
                string str = itemkey.Substring(i, 1);
 
                if (str[0] > sim[0])
                {
                    j++;
                }
                else
                {
                    Arr[j] = Arr[j] + itemkey.Substring(i, 1);
                }
            }
 
            string wd = "";
 
            for (int i = 0; i < j; i++)
            {
                int step1 = int.Parse(itemid) / 2;
 
                if (step1 == 0)
                {
                    wd = Arr[j + 1 - i];
                }
                else
                {
                    wd = Arr[i];
                }
            }
 
            string r = "";
 
            for (int k = 0; k < wd.Length; k++)
            {
                if ((k / 3) == 0)
                {
                    r = r + wd.Substring(k + 1, 1);
                }
            }
 
            return r;
        }
p.s. в работе еще не проверял, сомневаюсь в массивах, в C# они с 0 начинаются, а в фокспро с 1. могу ошибаться. Не пинайте сильно за название переменных, это черновой вариант.
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
12.09.2014, 13:58
VAL - по всей видимости преобразование из строкового предствления в числовое
MOD - скорее всего остаток от целочисленного деления целого числа на целое число. (в C# аналог % )
IIF - это совсем просто - это аналог C/C#
C#
1
Условие ? ЗначениеПРиИстине : ЗначениеПриЛжи
1
28 / 28 / 5
Регистрация: 24.03.2013
Сообщений: 238
12.09.2014, 13:59  [ТС]
Sergio Leone, спасибо. Нашел каким то чудом адекватный справочник на рутрекере.
Проверьте пожалуйста метод сверху.
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
12.09.2014, 15:06
Лучший ответ Сообщение было отмечено z668 как решение

Решение

Цитата Сообщение от z668 Посмотреть сообщение
Проверьте пожалуйста метод сверху.
не, допустили много мелких (и не очень) косячков.

попробуйте вот такой код:
C#
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
        static private string demixItemKey(string itemid, string itemkey)
        {
            string[] Arr = new string[16];
 
            int j = 1;
 
            string sim = "f";
 
            for (int i = 0; i < itemkey.Length; i++)
            {
                string str = itemkey.Substring(i, 1);
 
                if (str[0] > sim[0])
                {
                    j++;
                }
                else
                {
                    Arr[j] = Arr[j] + itemkey.Substring(i, 1);
                }
            }
 
            string wd = "";
 
            int step1 = int.Parse(itemid) % 2;
            for (int i = 1; i <= j; i++)
            {
                if (step1 == 0)
                {
                    wd = wd + Arr[j + 1 - i];
                }
                else
                {
                    wd = wd + Arr[i];
                }
            }
 
            string r = "";
            for (int k = 0; k < wd.Length; k++)
            {
                if ((k % 3) == 0)
                {
                    r = r + wd.Substring(k, 1);
                }
            }
 
            return r;
        }
по крайней мере для входных:
C#
1
2
            String itemid="406328539";
            String itemkey="6ef27b939319q8fc10aq7010e8q9ea57fa66qf3d1b3a0618dq46ede6fd806033b9d3e665f7caeq28e110ea0dcfq291d938b77fe";
он генерит тот же ответ, что и FoxPro:
Code
1
6293817095af1a14df039e5c21ed2d87
1
28 / 28 / 5
Регистрация: 24.03.2013
Сообщений: 238
12.09.2014, 15:08  [ТС]
Sergio Leone, весьма благодарен за помощь, метод отлично работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.09.2014, 15:08
Помогаю со студенческими работами здесь

Переписать функцию с С на C++\Qt
Нужно переписать функцию добавления заголовка wav в файл. Вот функция, которая была: int rawToWav(const char *rawfn, const char *wavfn,...

Переписать функцию
Приветствую всех. Не подскажите, как эту функцию переписать на чистый js? $(document).ready(function() { $('body').addClass('js');...

Переписать функцию с Pascal на C#
Как написать эту функцию C# Эта функция написана packal uses GraphABC; const T=35; Go=1e+10; kt=0.02575*T/300; function...

Не могу переписать функцию
Добрый день! Помогите пожалуйста! Совсем руки опускаются... Есть у меня такая функция: function = func3(handles, y4, X, z) ...

Переписать с С# на Матлаб функцию
Здравствуйте, помогите пожалуйста переделать эту функцию в матлба M-File static double function(double xValues) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru