Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330

Перевод кода из С++ в Visual Basic 6

27.01.2016, 21:27. Показов 2580. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Интересует перевод такого момента:
читаю файл до конца:
QBasic/QuickBASIC
1
2
        char buffer[500];
        fscanf(fp, "%s[^ ]", buffer);
хотелось бы узнать как можно перевести fscanf...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.01.2016, 21:27
Ответы с готовыми решениями:

Перевод кода из паскаля в Visual Basic
помогите перевести в Visual Basic пожалуйста program Proc47; var A,B,C,D,F,E,G,H:integer; p,q:integer; function...

Перевод кода с Visual Basic на паскаль под графический интерфейс
Атом. Изобразить модель атома произвольного химического элемента: ядро и электроны, вращающиеся по своим орбитам. Распределение электронов...

Перевод из C++ в Visual Basic
Здравствуйте. Прошу вашей помощи. #include "stdafx.h" #include <iostream> #include <cmath> using namespace std; void main() {...

29
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.01.2016, 22:05
Цитата Сообщение от Aleator Посмотреть сообщение
читаю файл до конца:
А если в файле больше 500 байт? =)

Цитата Сообщение от Aleator Посмотреть сообщение
хотелось бы узнать как можно перевести fscanf...
Если в массив байт:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Option Explicit
 
Private Sub Form_Load()
    Dim ff      As Integer
    Dim char()  As Byte
    Dim File    As String
    
    File = "c:\users\alex\desktop\WinDbg.txt"
    
    ff = FreeFile()
    Open File For Binary Access Read As #ff
        ReDim char(LOF(ff) - 1)
        Get #ff, , char()
    Close #ff
    
    Stop
End Sub
Добавлено через 1 минуту
Проверку на 0 байт в файле только еще нужно добавить.
1
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
28.01.2016, 00:38  [ТС]
А в массив string не подскажете как?
Я начал так:
Visual Basic
1
2
3
4
5
6
7
8
    Dim fp, fp1
    Dim buffer(500) As String
 
    fp = FreeFile                    
    Open ("11111.txt") For Input As #fp    
    
    fp1 = FreeFile                   
    Open ("22222.txt") For Output As #fp1
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
28.01.2016, 00:45
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Я так понимаю, что Вам нужна просто String, а не массив. В VB6 некоторые вещи выглядят совсем иначе.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Option Explicit
 
Private Sub Form_Load()
    Dim ff      As Integer
    Dim s  As String
    Dim File    As String
    
    File = "c:\users\alex\desktop\WinDbg.txt"
    
    ff = FreeFile()
    Open File For Binary Access Read As #ff
        s = String(Lof(ff), vbnullchar)
        Get #ff, , s
    Close #ff
    
    Stop
End Sub
Здесь проверка на 0 не нужна.

Добавлено через 1 минуту
Цитата Сообщение от Aleator Посмотреть сообщение
Visual Basic
1
Open ("22222.txt") For Output As #fp1
Это открытие не в бинарном режиме.
Функции Get, Put при такой записи работать не будут.
1
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
28.01.2016, 01:24  [ТС]
В исходном примере на С, массив был: char buffer[500];
поэтому я его так и "перевёл". К тому же, мне потом его надо просматривать, поэлементно.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
28.01.2016, 01:34
Было бы легче подсказать, если задачу обрисовать более детально,
например, с чем будете сравнивать и по какому правилу.
Сравнение символов или кодов символов или ...

Просмотр символов поэлементно:

Visual Basic
1
2
3
4
Dim i as long
for i = 1 to Len(s)
  debug.? mid$(s, i, 1)
next
1
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
29.01.2016, 14:22  [ТС]
Новую тему решил не создавать, а продолжить здесь. Интересует правильный перевод такого вот кода:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    unsigned int transaction_time_hour, transaction_time_min, transaction_time_sec;
       int i, j;
 
    float last_stock_market = -1;
    float last_time_transaction = -1;
 
    if(last_stock_market == i && last_time_transaction == (float)(transaction_time_hour*3600 + transaction_time_min*60 + transaction_time_sec))
    {
        continue;
    }
    else
    {
        last_stock_market = i;
        last_time_transaction = (float)(transaction_time_hour*3600 + transaction_time_min*60 + transaction_time_sec);
        j++;
    }
я перевёл как:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
   Dim transaction_time_hour As Integer, transaction_time_min As Integer, transaction_time_sec As Integer
     
   Dim last_stock_market As Double
   Dim last_time_transaction As Double
 
   Dim i As Integer, j  As Integer 
     
    If last_stock_market = i And last_time_transaction = CDbl(transaction_time_hour * 3600 + transaction_time_min * 60 + transaction_time_sec) Then
      ' continue
   Else
      last_stock_market = i
      last_time_transaction = CDbl(transaction_time_hour * 3600 + transaction_time_min * 60 + transaction_time_sec)
      j = j + 1
   End If
Однако в коде "CDbl(transaction_time_hour * 3600" получаю ошибку переполнения стёка. Тип double я менял на single, однако безрезультатно. Не подскажете, как исправить?
0
Заблокирован
29.01.2016, 14:39
CDbl(transaction_time_hour * 3600&
?

Добавлено через 1 минуту
Только стЁк здесь ни при чём.
1
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
29.01.2016, 14:42  [ТС]
Да, перевёл не так. Какое то переполнение...
Я пока не тестировал, а для чего &? Это ведь не строка.
0
Заблокирован
29.01.2016, 14:45
Для преобразования INTEGER в LONG (а не строку)
1
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
29.01.2016, 16:27  [ТС]
Теперь переполнение возникает в последней строчке:
Visual Basic
1
2
3
4
5
6
7
8
9
10
    Dim total_no_transactions As Integer
    total_no_transactions = 1000
 
    Dim streaming_data() As Single  
 
    ' ...
 
    Dim last_timestamp As Integer
 
    last_timestamp = CInt(streaming_data(total_no_transactions - 1, 1))
Полученное значение 36000. то есть, last_timestamp = CInt(36000). не знаю как здесь & использовать.
0
Заблокирован
29.01.2016, 16:30
Visual Basic
1
Dim last_timestamp As LONG 'Integer
1
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
29.01.2016, 16:32  [ТС]
Изменил на
Visual Basic
1
2
    Dim last_timestamp As Long   
    last_timestamp = CLng(streaming_data(total_no_transactions - 1, 1))
здесь заработало, в другом месте снова переполнение.
Подскажите пожалуйста, знатоки VB, какие типы на какие лучше менять при переводе кода из C на VB?
0
Заблокирован
29.01.2016, 16:36
int -> long
float -> double
1
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
29.01.2016, 16:39
Идите сначало отрепетируйте как правильно надо, а потом подходите ..Dragokas вообще согласен почти за так ..
решить ))
0
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
29.01.2016, 18:04  [ТС]
fever brain, жаль "-1" нету, я бы за "ответ" поставил...
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
29.01.2016, 18:13
Попробуй только .. я тебе минус миллион поставлю
не зли нас обоих ..
0
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
29.01.2016, 19:24  [ТС]
Открываю файл для чтения, но прочитать могу только 1000 строк.
Открывал и читал по своему (вариант Dragokas-а не использовал). Размер файла - 11 МБ.

Visual Basic
1
2
3
4
5
6
7
    fp = FreeFile()
    Open File For Input As #fp
 
    Do Until EOF(fp)
 
    Line Input #fp, myStr
Loop
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
29.01.2016, 19:36
Да вообще не переводите
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
29.01.2016, 19:36
Лучший ответ Сообщение было отмечено The trick как решение

Решение

unsigned int - аналога нет. См. Long (4 байт) или Currency (8 байт). Типы переменных.
float - аналога нет. Ближайший тип - Single.

&& - аналога нет. Ближайший оператор - And. Вычисляет сразу оба операнда вне зависимости от того, был ли 1-й операнд false.
continue - аналога нет. Меняйте логику кода или делайте переход к метке оператором Goto (плохой стиль).

Я бы примерно так переписал:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dim transaction_time_hour as long
Dim transaction_time_min as long
Dim transaction_time_sec as long
Dim transaction_time_total as long
Dim i as long, j as long
 
Dim last_stock_market as Single: last_stock_market = -1
Dim last_time_transaction as Single: last_time_transaction = -1
 
transaction_time_total = transaction_time_hour*3600 + transaction_time_min*60 + transaction_time_sec
 
if (last_stock_market <> i Or last_time_transaction <> transaction_time_total) then
        last_stock_market = i
        last_time_transaction = transaction_time_total
        j = j + 1
end if
Так ли необходим тип с плавающей точкой?
Разумеется, все объявления делать за пределами цикла (который я так понял у Вас опущен в примере).

Не по теме:


fever brain, к чему этот вброс? Я за так не делаю, только под настроение.

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.01.2016, 19:36
Помогаю со студенческими работами здесь

Перевод в Visual Basic
Решить нелинейное уравнение методом простых итераций Ln(x)-x+1.8 = 0 На отрезке По этому уравнению есть программка в Pascal ...

Перевод программы с С++ на Visual Basic
Ребят, помогите пожалуйста имеется прога, написанная на С++, необходимо перевести ее на бейсик. мозгов не хватает допереть это :D Оба...

Перевод из Visual Basic в qBasic
Sub My() Dim i As Integer, summ As Single, t As Single Dim x As Integer, f As Boolean t = CSng(InputBox(&quot;vvedite&quot;)) summ = 0 i...

Перевод программы C++ -> Visual Basic
Друзья, помогите пож. перевести код с языка C++ в Visual Basic, в котором я не очень хорошо разбираюсь. №1. Составить блок-схему и...

Перевод из Pascal в Visual Basic
Добрый день! Я пыталась перевести код программы из Pascal в Visual Basic. Дело в том, что курсовую надо сдавать в Visual Basic, а я его...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru