Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#流读取器读取空白并绕过它们_C#_Streamreader - Fatal编程技术网

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

C#流读取器读取空白并绕过它们,c#,streamreader,C#,Streamreader,我正在创建一个程序,读取一个文本文件并获取数据,然后将其放入数组。我的问题是,有一个列的目的是空的,但空白值必须仍然被视为一个值,但是当我的程序读取空白列时,它会读取下一个值,并将其放入值为0或空白的数组中。我试图计算每列之间的空格,以使其成为一个条件,但由于数据长度不同,空格不可靠。你知道我该怎么做吗 下面是我的文本数据的样子 Data1 Data2 Data3 1.325 1.57 51.2 2.2 21.85 12.5

我正在创建一个程序,读取一个文本文件并获取数据,然后将其放入数组。我的问题是,有一个列的目的是空的,但空白值必须仍然被视为一个值,但是当我的程序读取空白列时,它会读取下一个值,并将其放入值为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'];

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

如果您有一个标题列表,按照它们在数据中的显示顺序排列,并且如果您的值始终与标题对齐,那么这是一个起点

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)

因为我已经用完了时间,我所做的就是计算空格的数量,如果空格超过了一个数字(在我的例子中是10),我将在数组中添加一个空值

string[] lsData = pData.Split(' ');
            string[] lsData1 = new string[18];
            int newArrayData = 0;
            int spaceCounter = 0;

            for (int i = 0; i < lsData.Length; i++)
            {
                if (lsData[i] != "")
                {
                    lsData1[newArrayData] = lsData[i];
                    newArrayData++;
                    spaceCounter = 0;
                }
                else
                {
                    spaceCounter++;
                }


                if (spaceCounter >= 10)
                {
                    lsData1[newArrayData] = "";
                    newArrayData++;
                    spaceCounter = 0;
                }
            }
string[]lsData=pData.Split(“”);
字符串[]lsData1=新字符串[18];
int newArrayData=0;
int spaceCounter=0;
for(int i=0;i=10)
{
lsData1[newArrayData]=“”;
newArrayData++;
空间计数器=0;
}
}

除非列长度是固定的或值由某些字符(如逗号)分隔,否则它是高度不可预测的。如果您可以控制该文件,请尝试使用CSV格式生成该文件,使用标题起始偏移量作为列绝对偏移量(“Datax”的每个“D”),并将它们之间的距离作为绝对列宽。然后,对于下一行,使用substring函数进行拆分。这是一个棘手的问题,如果可能的话,您可以将数据更改为csv格式。但是,如果这是您所拥有的全部,您需要计算出列的最大宽度,并通过
计算空格,因为数据的长度不同
,如果无法确定空格数是否代表数据中的间隙,无法执行此操作。标题是否总是像这样
Data1 Data2 Data3
?它没有选项卡拆分:(