2013-03-21 4 views
-1

Мой текстовый файл данных, как это:Преобразование текстовых файлов данных в формате CSV

{1000}xxx{1200}xxx{3000}xxxxxx{5000} 
{1000}xx{1500}xxxxxx{4000}xx{6000} 
{1000}xxxx{1600}xxx{3000}xxx{6000} 
... 

Мне нужно преобразовать этот файл данных в CSV-файл или первенствует файл для анализа. Я попробовал Excel или другое программное обеспечение для конвертирования. Но это не работает.

Могу ли я использовать VB для этого? Я долгое время не использовал VB (более 10 лет).

Извините. Я не дал понять.

Число в фигурных скобках - это название поля. Каждая запись не имеет одного поля. Результат после преобразования должен быть таким:

(header line) 1000 1200 1500 1600 3000 4000 5000 6000 
(record line) xxx xxx   xxx  xxx 
     .  xxx  xxx   xxx  xxx 
     .  xxx    xxx xxx   xxx 

У нас есть файл текстовых данных каждый день (10 - 20 записей). Хотя данные невелики, нам не нужно переписывать файл excel, если мы можем преобразовать его в файл csv. Это может помочь нам много времени.

+0

Каким должен быть результат? – TAS

ответ

0

Вы почти наверняка можете использовать язык программирования (например, VB), чтобы внести это изменение. Я не уверен, что вам нужно это сделать.

Если вы пытаетесь написать программу для преобразования одного и того же типа файлов снова и снова, может возникнуть смысл создать программу на VB.net.

FYI, его трудно помочь посоветовать вам, не понимая больше о том, что вам нужно сделать? Например, размер файла, как часто вам нужно будет это делать, какой формат будет, и т. Д.

... но ответ, который я дал, ответил на вопрос, который вы задали! ... и я ищу точки респ;)

+0

Очки репутации, как правило, присуждаются за решение проблемы. Если проблема не была четко описана, попробуйте найти ее через комментарии к вопросу OP. – Neolisk

+0

Спасибо за ответ. Мы делаем это каждый день. Хотя данные volumn невелики. Каждый день имеет 10-20 транзакций. число в фигурной скобке фактически является именем поля. Каждая запись не имеет одинаковых полей. Мы попытались преобразовать этот файл текстовых данных в файл csv или excel. – user2196273

+0

Неолиск, одна вещь, которую я пытаюсь получить, это возможность оставлять комментарии :(. – Doug

0

В свете вашего объяснения того, как структурированы данные:

Imports System.IO 
Imports System.Text 
Imports System.Text.RegularExpressions 

Module Module1 

    Class Cell 
     Property ColumnName As String 
     Property Value As String 

     ' To help with debugging/general usage 
     Public Overrides Function ToString() As String 
      Return String.Format("Col: {0} Val: {1}", ColumnName, Value) 
     End Function 
    End Class 

    Dim table As New List(Of List(Of Cell)) 

    Sub Main() 
     Dim src As String = "C:\temp\sampledata.txt" 
     Dim dest = "C:\temp\sampledata.csv" 

     Dim colNames As New List(Of String) 

     ' This regex will look for zero or more characters ".*" surrounded by braces "\{ \}" and 
     ' collect the zero or more characters in a group "()". The "?" makes it non-greedy. 
     ' The second capture group "()" gets all the characters up to but not including 
     ' the next "\{" (if it is present). 
     Dim cellSelector = New Regex("\{(.*?)\}([^\{]*)") 

     ' Read in the cells and record the column names. 
     Using inFile = New StreamReader(src) 
      While Not inFile.EndOfStream 
       Dim line = inFile.ReadLine 
       Dim rowContent As New List(Of Cell) 
       For Each m As Match In cellSelector.Matches(line) 
        rowContent.Add(New Cell With {.ColumnName = m.Groups(1).Value, .Value = m.Groups(2).Value}) 
        If Not colNames.Contains(m.Groups(1).Value) Then 
         colNames.Add(m.Groups(1).Value) 
        End If 
       Next 
       table.Add(rowContent.OrderBy(Function(c) c.ColumnName).ToList) 
      End While 
     End Using 

     colNames.Sort() 

     ' add the header row of the column names 
     Dim sb As New StringBuilder(String.Join(",", colNames) & vbCrLf) 

     ' output the data in csv format 
     For Each r In table 

      Dim col = 0 
      Dim cellNo = 0 

      While cellNo < r.Count AndAlso col < colNames.Count 
       ' If this row has a cell with the appropriate column name then 
       ' add the value to the output. 
       If r(cellNo).ColumnName = colNames(col) Then 
        sb.Append(r(cellNo).Value) 
        cellNo += 1 
       End If 

       ' add a separator if is not the last item in the row 
       If col < colNames.Count - 1 Then 
        sb.Append(","c) 
       End If 

       col += 1 

      End While 

      sb.AppendLine() 

     Next 

     File.WriteAllText(dest, sb.ToString) 

    End Sub 

End Module 

Из данных образцов, выход

1000,1200,1500,1600,3000,4000,5000,6000 
xxx,xxx,,,xxxxxx,,, 
xx,,xxxxxx,,,xx,,, 
xxxx,,,xxx,xxx,,,, 

I обратите внимание, что ни один из последних столбцов не имеет в них данных. Это просто ошибка копирования или вставки или намеренная?

EDIT: Я использую Опция Infer On, поэтому некоторые из объявлений типа отсутствуют.

Смежные вопросы