Чтение данных из файла и их обработка

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
--DeL--
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 08.03.2007 (Чт) 9:57

Чтение данных из файла и их обработка

Сообщение --DeL-- » 18.04.2007 (Ср) 12:36

Возник вопрос по чтению данных из файла...
В файле данные в таком формате
1:1:0:0:20993:Ukrainian:32729:31749;1:1:0:0:2243:Zim:32807:31848;1:1:0:0:5546:Nikkiya:32774:31819;1:0:0:0:8648:SC1:32829:31826;
определяем по порядку числа. (до каждого двоеточия, конец строки;)
1 - изучена система или нет.
2 - есть маяк или нет.
3 - упускаем
4 - упускаем
5 - Номер звезды
6 - Имя планеты
7 и 8 координаты x и у.
От пункта 1 и 2 зависит какая картинка будет выводиться. Номер звезды должен выводиться под рисунком. Выводить данные буду через Bitblt (с ней проблем нет.....)
Подобных данных в файле может быть и 10000.
Собственно вопрос - как правильно считать информацию из данного файла и как дальше работать с переменными. Так как в дальнейшем просто будет обработка того, что юзер нажимает на рисунке и у него открывается характеристики планеты.
Словом несовсем пойму как лучше сделать......
Помогите плиз. Если можно с примером.
Думал сделать с использованием массивов и резки файлов (Split), но по моему тормоза будут ужасные.
Админ друг человека

Cytron
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 266
Зарегистрирован: 15.02.2007 (Чт) 21:09

Сообщение Cytron » 18.04.2007 (Ср) 13:44

неммм не совсем понял вопроса.
если поможет то
replace (strStroka,":",vbcrlf)
на а дальше в файл и из него читать for input.
ну это легче всего

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Чтение данных из файла и их обработка

Сообщение tyomitch » 18.04.2007 (Ср) 14:07

--DeL-- писал(а):Думал сделать с использованием массивов и резки файлов (Split), но по моему тормоза будут ужасные.

Не обязательно.
Если один раз прочитать весь файл в строку, и потом один раз посплитить, то тормозам будет неоткуда взяться.
Изображение

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 18.04.2007 (Ср) 14:07

А по-моему проще всего именно вариант, когда сначала считываешь весь файл, а потом используешь Split.
Быть... или не быть. Вот. В чём вопрос?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 18.04.2007 (Ср) 14:12

Сгенерируй 10000 записей да проверь. Если скорость не устроит и если текстовый формат хранения не критичен, то можно хранить в бинарном виде.
Сделать тип:
Код: Выделить всё
Cost MaxLength = 50 'к примеру

Type Planet
    State as Byte 'PlanetStateEnum
    Reserved1 as Long
    Reserved2 as Long
    Number as Long
    Name as String * MaxLength
    x as Long
    y as Long
End Type

Enum as PlanetStateEnum
    psNone = 0
    psExplored = 1
    psHasBeacon = 2
    psBoth = 4
End Enum

Dim Planets() As Planet
и загружать все уже готовенькое в массив четко определенного типа.
Лучший способ понять что-то самому — объяснить это другому.

Grover
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 29.03.2007 (Чт) 7:46

Сообщение Grover » 18.04.2007 (Ср) 15:31

К примеру есть строка
Stroka="Pupkin;Vasik;Petic;Marfa;"

Нам нуже элемент номер 3 из этой строки (знак ';' - разделитель элементов).

Msgbox GetFromStrNum(Stroka, 3)

Вот эта функция :

Код: Выделить всё
Function GetFromStrNum(s As String, n As Integer) As String
Dim pos As Integer
    pos = 0
    GetFromStrNum = ""
    For i = 1 To Len(s)
        If Mid(s, i, 1) = ";" Then
            pos = pos + 1
            If pos = n Then
                Exit Function
            Else
                GetFromStrNum = ""
            End If
        Else
            GetFromStrNum = GetFromStrNum + Mid(s, i, 1)
        End If
    Next i
End Function

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 18.04.2007 (Ср) 15:45

Grover, это лишнее. Приведённый код эквивалентен коду с использованием Split, только длиннее в семь раз и выполняться по-идее должен медленнее. Так что наверное лучшим выходом здесь будет решение, которое предложил Antonariy.
Salus populi suprema lex

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 18.04.2007 (Ср) 15:47

Grover, код отвратителен, во-первых, и во-вторых, ты обратил внимание на функцию Split, которую несколько раз упомянули до тебя?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Grover
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 29.03.2007 (Чт) 7:46

Сообщение Grover » 18.04.2007 (Ср) 15:48

Простите. :oops:

Чем пользуюсь, то и советую.

Надо почитать про Split...

Grover
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 29.03.2007 (Чт) 7:46

Сообщение Grover » 18.04.2007 (Ср) 15:55

Искал про Split и вот нашел про его скорость :

"...
Почему это происходит, понятно — сами функции Split, Filter и Join работают достаточно быстро, но постоянное создание динамических массивов требует довольно много времени. Так что, если скорость обработки действительно важна (например, при работе с большими объемами данных), то может быть имеет смысл потратить лишних 10 минут, чтобы написать не 4, а 16 строк программного кода.
..."

Источник :
http://www.microsoft.com/Rus/Msdn/Activ ... bles2.mspx

Это я для информации...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 18.04.2007 (Ср) 16:33

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

--DeL--
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 08.03.2007 (Чт) 9:57

Сообщение --DeL-- » 18.04.2007 (Ср) 16:41

ОК, спасибо большое, буду пробовать.
Админ друг человека

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 18.04.2007 (Ср) 16:46

Grover писал(а):Это я для информации...


А сам пробовал - на своем конкретном примере - минутное дело пару строчек набрать.

Да, еще как вариант - подобный текст можно попробовать загрузить сразу в Recordset. Когда-то я давал пример...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 106

    TopList