Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Текстовый файл в масивы, Обработка столбцов 
:(
    Опции темы
ss777
Дата 24.4.2008, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 18.4.2008

Репутация: нет
Всего: нет



Каким образом можно заполнить масивы данными из текстового файла в котором в качестве разделителя столбов используется табуляция, нужно чтобы каждый из столбцов был записан в отдельный масив. 
Вот до чего дошел дальше не получается в цикле For
Код

Public Class Form1
    Dim intKod() As UInteger
    Dim strMNN() As String
    Dim strNLP() As String
    Dim decCena() As Decimal
    Dim dblMYP() As Double

    Private Sub ОткрытьToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ОткрытьToolStripMenuItem.Click
        ' Открываем файл
        If ofd1.ShowDialog = Windows.Forms.DialogResult.OK Then
            ' Создаем объект на основе класса IO.StreamReader и открываем с помощью него файл
            Dim clsChitatel As New IO.StreamReader(ofd1.FileName)
            ' Переменная содержащая строку из файла
            Dim strLine As String
            ' Переменная содержащая значение столбика из файла
            Dim strTab() As String
            ' Цикл до достежения конца файла
            Do Until clsChitatel.EndOfStream
                ' Читаем строку и записываем в переменную
                strLine = clsChitatel.ReadLine()
                ' Обрабатывем строку и создаем новые строки в качестве разделителя строк vbTab  
                strTab = Split(strLine, vbTab)
                ' Дальше не получается
                For i As Integer = 0 To UBound(strTab)
                    intKod(i) = strTab(0)
                    strMNN(i) = strTab(1)
                    strNLP(i) = strTab(2)
                    decCena(i) = strTab(3)
                    dblMYP(i) = strTab(4)
                Next i
            Loop
        End If
    End Sub
End Class


PM MAIL   Вверх
tea_723
Дата 25.4.2008, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 13.9.2007

Репутация: нет
Всего: нет



Код

Public Class Form1
    Dim intKod As ArrayList = New ArrayList
    Dim strMNN As ArrayList = New ArrayList
    Dim strNLP As ArrayList = New ArrayList
    Dim decCena As ArrayList = New ArrayList
    Dim dblMYP As ArrayList = New ArrayList

    Private Sub ОткрытьToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ОткрытьToolStripMenuItem.Click
        ' Открываем файл
        If ofd1.ShowDialog = Windows.Forms.DialogResult.OK Then
            ' Создаем объект на основе класса IO.StreamReader и открываем с помощью него файл
            Dim clsChitatel As New IO.StreamReader(ofd1.FileName)
            ' Переменная содержащая строку из файла
            Dim strLine As String
            ' Переменная содержащая значение столбика из файла
            Dim strTab() As String
            Dim counter As Integer = 0
            ' Цикл до достежения конца файла
            Do Until clsChitatel.EndOfStream
                ' Читаем строку и записываем в переменную
                strLine = clsChitatel.ReadLine()
                ' Обрабатывем строку и создаем новые строки в качестве разделителя строк vbTab  
                strTab = Split(strLine, vbTab)
                try
                      intKod(counter) = strTab(0)
                      strMNN(counter) = strTab(1)
                      strNLP(counter) = strTab(2)
                      decCena(counter) = strTab(3)
                      dblMYP(counter) = strTab(4)
                Catch ex As Exception
                       MsgBox(ex.ToString())
                End Try
                counter = counter + 1
            Loop
        End If
    End Sub
End Class

Во первых, у тебя выходные массивы не были определены. Если ты знаешь их длину изначально, 
то можно использовать Array, если длина неопределена, используй ArrayList.
 
Во вторых, цикл for тебе совешенно не нужен, ты и так знаешь что в каком столбце.

В третьих Try... Catch на тот случай, если все-таки Split неправильно сработал или данных не хватает.



PM MAIL   Вверх
ss777
Дата 26.4.2008, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 18.4.2008

Репутация: нет
Всего: нет



Спасибо, покурил литературу разного рода, и справился 
код с комментариями посмотрите если что подработать можно
Код
Imports System.Text.RegularExpressions
Public Class Form1
    Dim intKod() As Integer
    Dim strMNN() As String
    Dim strNLP() As String
    Dim decCena() As Decimal
    Dim dblMYP() As Double

    Private Sub ОткрытьToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ОткрытьToolStripMenuItem.Click
        ' Открываем файл
        If ofd1.ShowDialog = Windows.Forms.DialogResult.OK Then
            ' Создаем объект(поток) на основе класса IO.StreamReader и открываем с помощью него файл
            Dim clsSchitatel As New IO.StreamReader(ofd1.FileName)
            ' Подсчитываем количество строк в файле для определения длинны масивов(количество строк в каждом столбике)
            Dim intLines As UInteger = Regex.Matches(clsSchitatel.ReadToEnd, ".+\n*").Count
            ' Закрываем поток подсчета строк
            clsSchitatel.Close()
            ' Создаем поток для чтения строк
            Dim clsChitatel As New IO.StreamReader(ofd1.FileName)
            ' Устанавливаем длинну масивов
            ReDim intKod(0 To intLines)
            ReDim strMNN(0 To intLines)
            ReDim strNLP(0 To intLines)
            ReDim decCena(0 To intLines)
            ReDim dblMYP(0 To intLines)
            'MsgBox(intLines)
            ' Переменная содержащая строку из файла
            Dim strLine As String
            ' Масив содержащий значение столбиков из строки файла
            Dim strTab() As String
            ' Цикл до достежения конца файла
            Do Until clsChitatel.EndOfStream
                ' Читаем строку, после курсор встает на начало следующей строки
                strLine = clsChitatel.ReadLine()
                ' Создаем строки в качестве разделителя строк vbTab  
                strTab = Split(strLine, vbTab)
                ' Объявляем счетчик для индексации массива
                Dim s As Integer
                intKod(s) = strTab(0)
                strMNN(s) = strTab(1)
                strNLP(s) = strTab(2)
                decCena(s) = strTab(3)
                dblMYP(s) = strTab(4)
                ' Переводим все масивы на следующий индекс
                s += 1
                ' Возвращаемся за новой порцией строк для strTab()
            Loop
            ' Закрываем поток
            clsChitatel.Close()
        End If
    End Sub
End Class

Итог работает как надо. Если скажем есть текстовый файл с разделителем столбцов (знак табуляции) 
Например
Код
123    ABC    DEF    456    789
135    ACE    GIK    246    579

Получаем:
Код
intKod(0)=123    strMNN(0)=ABC    strNLP(0)=DEF    decCena(0)=456    dblMYP(0)=789
intKod(1)135    strMNN(1)=ACE    strNLP(1)=GIK    decCena(1=)246    dblMYP(1)=579
                                    и т.д.


Попробую по твоему совету через ArrayList, в другом форуме тоже посоветовали его использовать, но в данном случае определяя количество строк можно определить и длинну масива, но все же с ArrayList будет правильнее, пошел читать литературу.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0819 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.