代码之家  ›  专栏  ›  技术社区  ›  Richard

使用文件助手;如何解析此CSV类型

  •  2
  • Richard  · 技术社区  · 17 年前

    尝试使用FileHelpers库以以下格式解析CSV时遇到一些问题。这让我有点困惑,因为字段分隔符似乎是一个空格,但字段本身有时用引号引起来,有时用方括号引起来。我正在尝试生成一个能够解析这个的RecordClass。

    以下是CSV中的一个示例:

    xxx.xxx.xxx.xxx - - [14/Jun/2008:18:04:17 +0000] "GET http://www.some_url.com HTTP/1.1" 200 73662339 "-" "iTunes/7.6.2 (Macintosh; N; Intel)"
    

    这是我们从一个带宽提供商那里收到的HTTP日志的摘录。

    3 回复  |  直到 14 年前
        1
  •  3
  •   bkaid    14 年前

    虽然我感谢Marc Gravell和Jon Skeet的输入,但我的问题是如何解析一个文件,其中包含使用FileHelpers库描述的格式的行(尽管我一开始的措辞很糟糕,描述的是“CSV”,而实际上并非如此)。

    对于感兴趣的人,解决方案是创建一个FileRecord类,如下所示:

    [DelimitedRecord(" ")]
    public sealed class HTTPRecord
    {
    
    public String IP;
    
    // Fields with prefix 'x' are useless to me... we omit those in processing later
    public String x1;
    [FieldDelimiter("[")]
    public String x2;
    
    
    [FieldDelimiter("]")]
    public String Timestamp;
    
    [FieldDelimiter("\"")]
    public String x3;
    
    public String Method;
    public String URL;
    
    [FieldDelimiter("\"")]
    public String Type;
    
    [FieldIgnored()]
    public String x4;
    
    [FieldDelimiter(" ")]
    public String x5;
    
    public int HTTPStatusCode;
    
    public long Bytes;
    
    [FieldQuoted()] 
    public String Referer;
    
    [FieldQuoted()] 
    public String UserAgent;
    }
    
        2
  •  2
  •   Marc Gravell    17 年前

    显而易见的说法是“那么它就不是CSV”。。。

    string t = Regex.Replace(s, @"\[([^\]]*)\]", @"""$1""")
    

        3
  •  1
  •   Jon Skeet    17 年前