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

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

Line Input #1, TextLine

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

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


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

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

как увидеть что лежит в Param(3,16)?
...
Рейтинг: 0 / 0
Двухмерный массив
    #36057801
mr.haker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если просто считывать каждую строку, то конечно получится одномерный массив из пяти элементов. Чтобы считать данные в двухмерный массив нужно для начала уточнить: каким образом данные записаны в текстовый файл? каждый элемент имеет фиксированное количество символов т.е все поля выровнены относительно левого края или нет? От этого зависит способ считывания данных.
...
Рейтинг: 0 / 0
Двухмерный массив
    #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
Двухмерный массив
    #36057815
Katerinishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mr.haker,

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

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

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

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

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


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Двухмерный массив
    #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
Двухмерный массив
    #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
Двухмерный массив
    #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
Двухмерный массив
    #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
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Двухмерный массив
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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