текст из данных

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Fast0490f
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 13.01.2009 (Вт) 3:29

текст из данных

Сообщение Fast0490f » 13.01.2009 (Вт) 3:47

всем!! привет!!!)))
помогите кто знает....
имею такой блок в текстовом файле который повторяется от 1000 и более (файлы весом от 4-до10 мб), каждый блок это объект с параметрами
[Data]
name=
sector=
set=
[END]


как считать все параметры и чтоб сильно не тормозил метод считывания


пробовал ini метод, читает только первый блок и все, на этом конец

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: текст из данных

Сообщение Viper » 13.01.2009 (Вт) 8:03

Fast0490f писал(а):пробовал ini метод, читает только первый блок и все, на этом конец
Ну и как же ты пробовал?
Весь мир матрица, а мы в нем потоки байтов!

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: текст из данных

Сообщение Joo » 13.01.2009 (Вт) 13:23

Юзай XML! В .NET все для этого есть, будет выглядеть так:
...
<DATA name= sector= set=/>
...
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: текст из данных

Сообщение iGrok » 13.01.2009 (Вт) 14:10

Viper писал(а):
Fast0490f писал(а):пробовал ini метод, читает только первый блок и все, на этом конец
Ну и как же ты пробовал?

А у него имена секций по всему файлу повторяются [Data] [END]. Не будет он как ini обычными ф-циями читаться..
label:
cli
jmp label

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: текст из данных

Сообщение MIT » 13.01.2009 (Вт) 14:21

Я так понял, что автор имеет файл для обработки, а не создает его.
Автору: поищи по форуму, тут совсем недавно обсуждалась работа с INI
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: текст из данных

Сообщение Joo » 14.01.2009 (Ср) 4:36

Ежели автор имеет файл, а не создает его, то в помощь регулярные выражения:
Код: Выделить всё
Imports System.Text.RegularExpressions
...
Try
   Dim RegexObj As New Regex("^\[Data\].*?name=(.*?)\r\nsector=(.*?)\r\nset=(.*?)\r\n\[END\]$", RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline)
   Dim MatchResults As Match = RegexObj.Match(Source)
   While MatchResults.Success
      Dim i As Integer
      For i = 1 To MatchResults.Groups.Count
         Dim GroupObj As Group = MatchResults.Groups(i)
         If GroupObj.Success Then
            ' matched text: GroupObj.Value
            ' match start: GroupObj.Index
            ' match length: GroupObj.Length
         End If
      Next
      MatchResults = MatchResults.NextMatch()
   End While
Catch ex As ArgumentException
End Try
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

Fast0490f
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 13.01.2009 (Вт) 3:29

Re: текст из данных

Сообщение Fast0490f » 14.01.2009 (Ср) 7:49

Scarabey писал(а):Ежели автор имеет файл, а не создает его, то в помощь регулярные выражения:
Код: Выделить всё
Imports System.Text.RegularExpressions
...
Try
   Dim RegexObj As New Regex("^\[Data\].*?name=(.*?)\r\nsector=(.*?)\r\nset=(.*?)\r\n\[END\]$", RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline)
   Dim MatchResults As Match = RegexObj.Match(Source)
   While MatchResults.Success
      Dim i As Integer
      For i = 1 To MatchResults.Groups.Count
         Dim GroupObj As Group = MatchResults.Groups(i)
         If GroupObj.Success Then
            ' matched text: GroupObj.Value
            ' match start: GroupObj.Index
            ' match length: GroupObj.Length
         End If
      Next
      MatchResults = MatchResults.NextMatch()
   End While
Catch ex As ArgumentException
End Try


файл такой...сам его я не создаю..(

вставил код пишет Error 1 Name 'Source' is not declared.

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: текст из данных

Сообщение Joo » 14.01.2009 (Ср) 10:59

Fast0490f писал(а):файл такой...сам его я не создаю..(
вставил код пишет Error 1 Name 'Source' is not declared.


Объяви переменную Source и запхай туда содержимое файла
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: текст из данных

Сообщение Joo » 18.01.2009 (Вс) 15:48

Вот пример полностью:
Код: Выделить всё
Imports System.Text.RegularExpressions

Module TestModule
    Dim Data(-1) As SData

    Sub Main()
        Console.Write("Введите путь к файлу: ")
        Try
            Dim Source As String = IO.File.ReadAllText(Console.ReadLine, System.Text.Encoding.ASCII)

            Dim RegexObj As New Regex("^\s*?\[Data\].*?name=(.*?)\s*sector=(.*?)\s*set=(.*?)\s*\[END\]\s*?$", RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline)
            Dim MatchResults As Match = RegexObj.Match(Source)
            While MatchResults.Success
                ReDim Preserve Data(Data.Length)
                Data(Data.Length - 1).Name = MatchResults.Groups(1).Value
                Data(Data.Length - 1).Sector = MatchResults.Groups(2).Value
                Data(Data.Length - 1).Set = MatchResults.Groups(3).Value
                MatchResults = MatchResults.NextMatch()
            End While
            Console.WriteLine("Найденных блоков {0}", Data.Length)
        Catch ex As ArgumentException
        End Try
        Console.ReadKey()
    End Sub

    Public Structure SData
        Public Name As String
        Public Sector As String
        Public [Set] As String
    End Structure
End Module
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог


Вернуться в Visual Basic .NET

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

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

    TopList