Извлечение символов из длинной строки и переформатирование вывода в CSV с использованием ключевых слов с VB.net - PullRequest
0 голосов
/ 10 ноября 2010

Я новичок в VB.Net 2008. У меня есть задача, которую нужно решить, она касается извлечения символов из длинной строки в консоль, извлеченный текст должен быть переформатирован и сохранен в файле CSV. Строка выходит из базы данных.

Это выглядит примерно так: UNH+RAM6957+ORDERS:D:96A:UN:EGC103'BGM+38G::ZEW+REQEST6957+9'DTM+Z05:0:805'DTM+137:20100930154

Значения разделены на '.

Я могу запросить базу данных и отобразить строку на консоли, но теперь мне нужно извлечь Ключевое слово 'ORDERS', например, и скажем, что это следующие 5 символов. Поэтому выходные данные должны выглядеть следующим образом: ORDERS:D:96A, тогда мне нужно извлечь ключевое слово 'BGM' и следующие пять символов, чтобы выходные данные выглядели так: BGM+38G:

После извлечения всех ключевых слов результат должен быть разделен запятой и иметь вид:

ORDERS:D:96A,BGM+38G: он должен быть автоматически сохранен в файл CSV.

Я уже пробовал:

'Lookup for containing KeyWords
                    Dim FoundPosition1 = p_EDI.Contains("ORDERS")
                    Console.WriteLine(FoundPosition1)

Что дает стартовую позицию ключевого слова.

Я пытался обрезать все вокруг ключевого слова "DTM". Переменная EDI содержит всю строку из базы данных:

Dim FoundPosition2 = EDI
                    FoundPosition2 = Trim(Mid(EDI, InStr(EDI, "DTM")))
                    Console.WriteLine(FoundPosition2)

Может кто-нибудь помочь, пожалуйста? Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 10 ноября 2010

У меня нет моей IDE, но что-то вроде этого будет работать:

dim EDI as string = "UNH+RAM6957+ORDERS:D:96A:UN:EGC103'BGM+38G::ZEW+REQEST6957+9'DTM+Z05:0:805'DTM+137:20100930154"

dim result as string = KeywordPlus(EDI, "ORDER", 5) + "," _
    + KeywordPlus(EDI, "BGM", 5)

function KeywordPlus(s as string, keyword as string, length as integer) as string
    dim index as integer = s.IndexOf(keyword)
    if index = -1 then return ""
    return s.substring(index, keyword.length + length)
end function
1 голос
/ 10 ноября 2010

Чтобы проиллюстрировать шаги:

' Find the position where ORDERS is in the string.'
Dim foundPosition = EDI.IndexOf("ORDERS")
' Start at that position and extract ORDERS + 5 characters = 11 characters in total.'
Dim ordersData = EDI.SubString(foundPosition, 11)

' Find the position where BGM is in the string.'
Dim foundPosition2 = EDI.IndexOf("BGM")
' Start at that position and extract BGM + 5 characters = 8 characters in total.'
Dim bgmData = EDI.SubString(foundPosition2, 8)

' Construct the CVS data.'
Dim cvsData = ordersData & "," & bgmData
0 голосов
/ 11 ноября 2010

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

                 If EDI.Contains("LOC") Then
                    Dim foundPosition1 = EDI.IndexOf("LOC")
                    ' Start at that position and extract ORDERS + 5 characters = 11 characters in total.'
                    Dim locData = EDI.Substring(foundPosition1, 11)
                    'Console.WriteLine(locData)

                    Dim FoundPosition2 = EDI.IndexOf("QTY")
                    Dim qtyData = EDI.Substring(FoundPosition2, 11)
                    'Console.WriteLine(qtyData)

                    ' Construct the CSV data.
                    Dim csvData = locData & "," & qtyData
                    'Console.WriteLine(csvData)

                    ' Creating the CSV File.
                    Dim csvFile As String = My.Application.Info.DirectoryPath & "\Test.csv"
                    Dim outFile As IO.StreamWriter = My.Computer.FileSystem.OpenTextFileWriter(csvFile, True)

                    outFile.WriteLine(csvData)
                    outFile.Close()
                    Console.WriteLine(My.Computer.FileSystem.ReadAllText(csvFile))
                End IF

Веселись!

...