解析此文件的最佳方法是什么



我只是想知道是否有人知道我可以解析帖子底部文件的好方法。

我有一个数据库设置,每个部分都有正确的表,例如引用表,调用方表,位置表。每个表都具有与以下文件中显示的相同列

我真的很想要一些相当遗传的东西,所以如果文件布局发生变化,它不会让我陷入困境。 目前,我只是一次一行地读取文件,然后使用案例语句来检查我所在的部分。

有人能帮我解决这个问题吗?

附言。我正在使用 VB,但 C# 或其他任何东西都可以,文档中的 x 只是我空白

的个人信息

谢谢内森

文件:--->

DIAL BEFORE YOU DIG
Call 1100, Fax 1300 652 077
PO Box 7710 MELBOURNE, VIC 8004
Utilities are requested to respond within 2 working days and reference the Sequence number.
[REFFERAL DETAILS]
FROM=                 Dial Before You Dig - Web
TO=                   Technical Services
UTILITY ID=           xxxxxx
COMPANY=              {Company Name}
ENQUIRY DATE=         02/10/2008 13:53
COMMENCEMENT DATE=    06/10/2008
SEQUENCE NO=          xxxxxxxxx
PLANNING=             No
[CALLER DETAILS]
CUSTOMER ID=          403552
CONTACT NAME=         {Name of Contact}
CONTACT HOURS=        0
COMPANY=              Underground Utility Locating
ADDRESS=              {Address}
SUBURB=               {Suburb}
STATE=                {State}
POSTCODE=             4350
TELEPHONE=            xxxxxxxxxx
MOBILE=               xxxxxxxxxx
FAX TYPE=             Private
FAX NUMBER=           xxxxxxxxxx
PUBLIC ADDRESS=       xxxxxxxxxx
PUBLIC TELEPHONE=
EMAIL ADDRESS=        {Email Address}
[LOCATION DETAILS]
ADDRESS=              {Location Address}
SUBURB=               {Location Suburb}
STATE=                xxx
POSTCODE=             xxx
DEPOSITED PLAN NO=    0
SECTION & HUNDRED NO= 0
PROPERTY PHONE NO=
SIDE OF STREET=       B
INTERSECTION=         xxxxxx
DISTANCE=             0-200m B
ACTIVITY CODE=        15
ACTIVITY DESCRIPTION= xxxxxxxxxxxxxxxxxx
MAP TYPE=             StateGrid
MAP REF=              Q851_63
MAP PAGE=
MAP GRID 1=
MAP GRID 2=
MAP GRID 3=
MAP GRID 4=
MAP GRID 5=
GPS X COORD=
GPS Y COORD=
PRIVATE/ROAD/BOTH=    B
TRAFFIC AFFECTED=     No
NOTIFICATION NO=      3082321
MESSAGE=              entire intersection of Allora-Clifton rd , Hillside
rd and merivale st
MOCSMESSAGE=          Digsafe generated referral
Notice: Please DO NOT REPLY TO THIS EMAIL as it has been automatically generated and replies are not monitored. Should you wish to advise Dial Before You Dig of any issues with this enquiry, please Call 1100
(See attached file: 3082321_LLGDA94.GML)

一旦你知道文件格式被称为".ini",谷歌就有答案

了。

编辑:也就是说,这是一个.ini加上一些额外的前导/尾随垃圾。

您可以按顺序读取文件的每一行。每一行本质上都是一个名称值对。将每个值放在按名称键入的映射(哈希表)中。为每个部分使用地图。解析完文件后,您将获得包含所有名称值对的映射。遍历每个映射并填充数据库表。

我会前往Python进行任何类型的字符串解析。 我不确定你想保留多少这些信息,但我可能会使用 Python 的 split() 函数在=上拆分以摆脱等号,然后从第二块馅饼中去除空格。

首先,我会屏蔽我知道我不需要的页眉/页脚信息,然后执行类似于以下内容的操作:

让我们取一个块并将其保存在test1.txt中:

地址= {位置地址}城区= {位置郊区}状态 = xxx邮政编码= xxx存款计划 NO= 0部分 & 百号= 0物业电话=

这里有一个小的python片段:

>>> f = open("test1.txt", "r")>>> l = f.readlines()>>> l = [line.split('=') for line in l]>>> 中的行:    印刷线["地址", "{位置地址}"]['SUBURB', '{Location Suburb}']["状态"、"xxx"]["邮政编码", "xxx"]["存款计划编号"、"0"]["部分和百号","0"]["物业电话", "]

这基本上会给你一个[列,值]元组,你可以用它来将数据插入你的数据库(在转义所有字符串等之后,SQL注入警告)。

这是假设电子邮件输入和您的数据库将具有相同的列名称,但如果它们没有,则使用字典设置列映射将相当简单。 另一方面,如果电子邮件和列是同步的,则无需知道列的名称即可进行解析。

您可以遍历伪字典,并在参数化 sql 字符串的正确位置打印出每个键值对。

希望这有帮助!

编辑:虽然这是在Python中,但C#/VB.net应该具有相同/相似的功能。

Using f As StreamReader = File.OpenText("sample.txt")
    Dim g As String = "undefined"
    Do
        Dim s As String = f.ReadLine
        If s Is Nothing Then Exit Do
        s = s.Replace(Chr(9), " ")
        If s.StartsWith("[") And s.EndsWith("]") Then
            g = s.Substring("[".Length, s.Length - "[]".Length)
        Else
            Dim ss() As String = s.Split(New Char() {"="c}, 2)
            If ss.Length = 2 Then
                Console.WriteLine("{0}.{1}={2}", g, Trim(ss(0)), Trim(ss(1)))
            End If
        End If
    Loop
End Using

相关内容

  • 没有找到相关文章

最新更新