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

C# 如何在文本文件中执行文本匹配,然后将文本后的下一行移动到csv文件中?,c#,csv,text,C#,Csv,Text,我需要阅读文本文件,然后检查文本文件内容中的输入文本 如果存在输入文本,则在输入文本到csv文件后移动下一行 示例输入:Input.txt Hi Hello ------------------------------------------------------------------------------- Code Name ID Customers CID Time. % ==================== ========= ======

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

如果存在输入文本,则在输入文本到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
如果我给出输入代码名,那么代码名后面的两行将保存在csv文件中,直到换行

如果输入无名称,则无名称后的一行将存储在另一个csv文件中

只需要用c语言编写代码

我对c控制台应用程序略知一二


如何编写代码以执行文本文件读取并将内容转换为csv

由于输入文件的格式不是最好的设置,我们需要进行预读以使其正常工作。下面的过程可以将给定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();

    }

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

您的问题很不清楚。是否要从文本文件中读取数据,并根据代码名从CSV中查找更多信息?后面2行是什么意思?代码名下面有两行以Harish SM&Siva DM开头,将其移动到csv文件中。您可以显示您尝试了什么吗?我刚刚尝试了代码,但我不知道如何使用逻辑读取匹配代码名的下一行。如果我没有输入名称,则结果只能显示为MS Norway行。但它也显示数据在csv中,感谢添加了MS Norway不幸的是,由于文件的设计,这是无法帮助的。在解析时,将另一个=======================行放在前面。由于文件的设计,这是无法帮助的。将另一行=======================放在空行之后和末尾文本之前可以更正此问题。另一个选项是通过字符串[]进行解析时如果您检测到不符合规格的行不包含与第一行相同数量的制表符,则您可以放弃该行以及任何剩余行。请编辑与我的案例相关的代码,好吗?上面发布的文件布局不会显示它是使用制表符作为分隔符还是仅使用空格。另外,我假设由于最初显示选择的字体,列的对齐方式并不完整。如果每行上的数据由制表符分隔,则可以在string[]->.csv函数中轻松完成。否则,您需要确定列宽
string[] entries = GetDataLinesFromFile("input.txt", "Code Name");