C#流阅读器读取空白并绕过它们

问题描述 投票:-1回答:2

我正在创建一个程序,该程序读取文本文件并获取数据,然后将其放入数组。我的问题是,在某些情况下,列原本打算是空白的,但空白值仍必须视为一个值,但是当我的程序读取空白列时,它将读取下一个值并将其放入应包含该值的数组中为0或空白。我试图计算每列之间的间隔以使其成为条件,但是由于数据的长度不同,所以这些间隔并不可靠。关于如何执行此操作的任何想法?

这是我的文本数据的外观。

Data1    Data2    Data3
1.325    1.57     51.2
2.2               21.85
         12.5     25.13
15.85    13.78    1.85

我需要我的数组看起来像这样

firstRow['1.325','1.57','51.2'];
secondRow['2.2','0','21.85'];
c# streamreader
2个回答
0
投票

如果文件是tab分割的,请使用line.Split("\t")获取每一行的子字符串数组。然后,您可以将每个子字符串转换为数据类型。您的情况必须为空,例如decimal?


0
投票

这里是一个起点,如果您具有一个标题列表(按其在数据中的显示顺序,并且您的值始终与标题对齐)。>>

import io, csv, sys

data = '''\
Data 1    Data 2    Data 3
1.325     1.57      51.2
2.2                 21.85
          12.5      25.13
15.85     13.78     1.85
'''

headers = ['Data 1', 'Data 2', 'Data 3'] # order should match headers

f = io.StringIO(data)
h = f.readline()
indexes = [h.find(s) for s in headers]
rows = []
for line in f:
    line = line[:-1] # strip trailing linefeed
    d = {}
    for key, index in list(zip(headers, indexes))[::-1]: # slice from the right
        val = line[index:]
        line = line[:index]
        d[key] = val.strip()
    rows.append(d)

writer = csv.DictWriter(sys.stdout, headers)
writer.writeheader()
writer.writerows(rows)
© www.soinside.com 2019 - 2024. All rights reserved.