如何在文本文件中执行文本匹配,然后将文本之后的下一行移动到csv文件中?

时间:2016-10-26 04:48:05

标签: c# csv text

我需要阅读文本文件,然后检查文本文件中内容的输入文本。

如果输入文本存在,则将nextline(在输入文本之后)移动到csv文件中。

示例输入: input.txt

Hi

Hello

-------------------------------------------------------------------------------
Code Name       ID Customers     CID  Time.    %   
==================== ========= =========== ============ ===== ================= 

Harish SM        1001    Tower      India      44.58  
Siva DM          2310    Cata       China      56.78  



No Name           ID       Customers        
==================== ========= =========== 
MS Norway         1001     UNIBIC   

Datas are inside the csv file.
THanks

如果我输入“代码名称”,那么CodeName后面的那两行将保存在csv文件中直到换行符。

如果输入“No Name”,则No Name之后的一行将存储在另一个csv文件中。

只需要用c#编写代码。

我对c#console应用程序有点了解

如何编写代码以执行文本文件读取和内容到csv?。

1 个答案:

答案 0 :(得分:2)

由于输入文件的格式不是最好的设置,我们需要提前读取才能使其正常工作。以下过程应该将给定ID代码之后的行提取为字符串数组,第一个包含标识符行。

public string[] GetDataLinesFromFile(string filename, string searchString)
    {
        List<string> dataEntries = new List<string>();

        using (System.IO.StreamReader stream = new System.IO.StreamReader(filename))
        {
            System.IO.TextReader tr = stream;

            bool foundSearchString = false;
            string lastLine = string.Empty;
            string line = string.Empty;

            while (!stream.EndOfStream)
            {
                lastLine = line;
                line = tr.ReadLine();
                if (lastLine.Trim().StartsWith(searchString) && line.Contains("===================="))
                {
                    foundSearchString = true;
                    continue;
                }
                if (foundSearchString)
                {
                    // Start after the divider line
                    if (lastLine.Contains("===================="))
                        continue;

                    // If the current line read is a marker line, then our last line is actually a new identifier line
                    if (line.Contains("===================="))
                    {
                        // Can be used to look for multiple listings with the same ID
                        foundSearchString = false;
                        continue;

                        // If you only want the first found ID, uncomment this and comment out above
                        // return dataEntries.ToArray();
                    }

                    // If our previously read line is not empty, add it to the list of strings
                    if (lastLine.Trim().Length != 0)
                        dataEntries.Add(lastLine);
                }
            }
        }
        return dataEntries.ToArray();

    }

然后要使用此功能,只需调用它:

string[] entries = GetDataLinesFromFile("input.txt", "Code Name");

要将这些文件保存到.csv文件中,您只需遍历字符串数组中的每个字符串并查找选项卡标记作为分隔符,或者如果列的宽度设置为宽度,那么您将硬编码这些宽度英寸