Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Двухмерный массив / 11 сообщений из 11, страница 1 из 1
24.06.2009, 14:45
    #36057661
Katerinishe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двухмерный массив
я новичок поэтому наверное очень глупый вопрос.

Есть файл текстовый из 5 строк и 22 полей разделенных ";"
Я открываю его и читаю построчно в цикле

Line Input #1, TextLine

потом я записываю каждую строку в массив

Param = Split(texLine, ";")
(выше декларирую переменную Dim Param() As String)


так вот я не понимаю что за массив у меня создается? одномерный или двухмерный?

Как мне сделать так чтобы каждая новая строка из файла добавлялась бы как новая строка массива?

как увидеть что лежит в Param(3,16)?
...
Рейтинг: 0 / 0
24.06.2009, 15:21
    #36057801
mr.haker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двухмерный массив
Если просто считывать каждую строку, то конечно получится одномерный массив из пяти элементов. Чтобы считать данные в двухмерный массив нужно для начала уточнить: каким образом данные записаны в текстовый файл? каждый элемент имеет фиксированное количество символов т.е все поля выровнены относительно левого края или нет? От этого зависит способ считывания данных.
...
Рейтинг: 0 / 0
24.06.2009, 15:25
    #36057812
Katerinishe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двухмерный массив
Chto s massivom ne tak esli:
LBound(Param) =0
UBound(Param) =-1

Esli stroka
VOI name;VOI type;Volume [mm³];Dmin [%];Dmax [%];Dmean [%];S.D. [%];Dcrit [%];D10 [%];D90 [%];Dx [%];Dx mm³ [%];Dx mm³ [%];Vcrit [mm³];V100 [mm³];V120 [mm³];V150 [mm³];V200 [mm³];V300 [mm³];Vx [mm³];Vx cGy [mm³];Vx cGy [mm³];

obrabatyvaetsa tak
Param = Split(texLine, ";")

Ne dolzhno li byt tak:
LBound(Param) =0
UBound(Param) =21

kak uvidet' cho v Param?
ja pishu
MsgBox(Param)

no programma rugaetsja
...
Рейтинг: 0 / 0
24.06.2009, 15:26
    #36057815
Katerinishe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двухмерный массив
mr.haker,

Ja ego razbivaju s pomoshju Split
...
Рейтинг: 0 / 0
24.06.2009, 15:35
    #36057832
Katerinishe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двухмерный массив
mr.haker,

Я поняла что создаетя пустой массив :-(
как мне все же из моей строки сделать массив содержащий то что находитя между ";"?
...
Рейтинг: 0 / 0
24.06.2009, 16:35
    #36058021
mr.haker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двухмерный массив
Насколько я знаю по своему опыту, функция Split должна использоваться совместно с функцией Join, тогда ошибки не будет.

Param = Split(texLine, ";")
Param2 = Join(Param, "")
msgbox (Param2)

Но я не совсем понимаю, для чего ты используешь функцию split. Она просто вырежет из твоей строки все точки с запятой, но никак не разделит данные. Данные в текстовый файл лучше записать в другом виде, если это в твоей компетенции...
...
Рейтинг: 0 / 0
24.06.2009, 16:55
    #36058088
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двухмерный массив
> Автор: mr.haker
> Но я не совсем понимаю, для чего ты используешь функцию split. Она просто вырежет из твоей строки все точки с
> запятой, но никак не разделит данные.

Что значит не разделит? сплит как раз разделяет строку на элементы массива, используя символ разделитель для разделения
MSDN


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
24.06.2009, 17:48
    #36058237
mr.haker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двухмерный массив
Набросал вот такой код, должно работать. По крайней мере у меня всё работает правильно.

Код: 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.
Private MyArray( 5 ,  22 )
Private TextLine( 5 )

Private Sub Command1_Click()

MyFile = FreeFile

Open ("C:\Data.txt") For Input As #MyFile
 

        For i =  0  To  4 
                  
        Line Input #MyFile, TextLine(i)
                
        SplitArray = Split(TextLine(i), ";")
                 
                  For j =  0  To  21 
                                    
                  MyArray(i, j) = SplitArray(j)
                                        
                  Next j
                           
         Next i
  
  Close #MyFile
  
End Sub
...
Рейтинг: 0 / 0
24.06.2009, 17:59
    #36058264
mr.haker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двухмерный массив
Теперь считать какой-то конкретный элемент будет просто:

Код: plaintext
1.
2.
Private Sub Command2_Click()
MsgBox MyArray( 0 ,  21 )
End Sub

Это код для считывания последнего элемента первой строки.

Только всегда учитывай то, что если нужно считать во второй строеке пятый элемент, писать надо
MyArray(1, 4), т.е. отнимать единицу от номера элемента строки и от номера элемента столбца. Можно, конечно, сделать и по-другому, чтобы считывать данные, не отнимая единицу, если тебе это нужно, но подскажу как, хотя я думаю тут догадаться будет не сложно.
Кстати, тод код, что я до этого привёл будет работать если у тебя 5 строк и в каждой по 22 поля, т.е. всего 5*22 =110 данных, по крайней мере я так понял задачу.


P.S.
надо было писать не MsgBox(Param) а MsgBox(Param(5)), где число - номер элемента строки.
...
Рейтинг: 0 / 0
24.06.2009, 17:59
    #36058266
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двухмерный массив
Katerinishe,

В. так вот я не понимаю что за массив у меня создается? одномерный или двухмерный?
О. Одномерный

В. Как мне сделать так чтобы каждая новая строка из файла добавлялась бы как новая строка массива?
О. Декларируй двумерный массив.
В его каждую новую строку пиши одномерный массив Param как результат работы Split после каждой Line Input #1, TextLine.
Не забудь Redim Preserve по ВТОРОМУ индексу двумерного массива на каждой итерации Line Input #1, TextLine и Param = Split(texLine, ";"). Увеличивай второй индекс на один.

В. как увидеть что лежит в Param(3,16)?
О. Никак. Он у тебя будет одномерный, а не двумерный, поскольку Split возвращает одномерный массив. Если тебе в принципе надо посмотреть содержимое переменной как таковой, воспользуйся функцией Debug.Print или режимом Debug с наведением курсора на переменную.
...
Рейтинг: 0 / 0
26.06.2009, 12:43
    #36061490
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двухмерный массив
ещё вариант, если все записи в файле имеют одинаковое кол-во полей
Код: plaintext
1.
2.
3.
4.
5.
Private Type zapis
    pole1 As String
    pole2 As Double
    pole3 As Date
End Type
Код: 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.
Private Sub Command1_Click()
Dim buf As String
Dim mas() As String
Dim rec() As zapis

Dim rFF As Integer:  rFF = FreeFile

Open "C:\TEXT.TXT" For Input As #rFF

Dim i As Long
Do Until EOF(rFF)
    ReDim Preserve rec(i)
    Line Input #rFF, buf
    mas = Split(buf, ";")
    rec(i).pole1 = mas( 0 )
    rec(i).pole2 = mas( 1 )
    rec(i).pole3 = mas( 2 )
    i = i +  1 
Loop

тут работаем с массивом rec состоящий из трёх полей
...

Close #rFF

End Sub
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Двухмерный массив / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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