Vb.net 从制表符分隔的文本文件复制到自身

Vb.net 从制表符分隔的文本文件复制到自身,vb.net,copy-paste,delimited-text,Vb.net,Copy Paste,Delimited Text,我有一个制表符分隔的文本文件,如下所示: name \t loan period \t loan amount John \t 5 years \t 6000 Sarah \t 5 years \t 6000 Jane \t 1 month \t 100 我希望将“贷款期限”=“5年”的行复制到“贷款期限”=“1个月”的行,以显示比较。新行将追加到结果文件的末尾 我希望达到的最终结果是: name \t loan period \t loan

我有一个制表符分隔的文本文件,如下所示:

name    \t loan period \t loan amount
John    \t 5 years     \t 6000
Sarah   \t 5 years     \t 6000
Jane    \t 1 month     \t 100
我希望将“贷款期限”=“5年”的行复制到“贷款期限”=“1个月”的行,以显示比较。新行将追加到结果文件的末尾

我希望达到的最终结果是:

name    \t loan period \t loan amount
John    \t 5 years     \t 6000
Sarah   \t 5 years     \t 6000
Jane    \t 1 month     \t 100
John    \t 1 month     \t 100
Sarah   \t 1 month     \t 100
我一直在用VisualBasic.Net处理这个问题,到目前为止,这就是我想到的

    Dim strData As String
    Dim i As Short
    Dim strLine() As String
    lngSize = 0

FileOpen(1, txtloanlistinput.Text, OpenMode.Input)
    While Not EOF(1)
        i = i + 1
        strData = LineInput(1)
    End While
    FileClose(1)
    ReDim loanlist(i)
    strData = ""
    lngSize = i
    i = 0
    FileOpen(2, txtloanlistinput.Text, OpenMode.Input)
    While Not EOF(2)
        i = i + 1
        strData = LineInput(2)
        If i = 1 Then
            strData = LineInput(2)
        End If
        strLine = Split(strData, Chr(9))
        loanlist(i).strName = strLine(0)
        loanlist(i).strLoanPeriod = strLine(1)
        loanlist(i).curLoanAmount = strLine(2)
    End While
    FileClose(1)
    FileClose(2)
关于如何继续,我感到茫然,我想我应该寻求帮助。

一种方法是:

循环遍历文件一次,并将每个5年的名称放入某个数组中。 然后使用File.AppendText(路径)返回StreamWriter。 循环遍历名称数组并将其写入StreamWriter,然后刷新并关闭


查看示例代码。

有点难看,但这只是一个开始

//c#

希望能有帮助


注意:飞行必须以新行结束。下面是给定的格式(3列)。

谢谢,很抱歉回复太晚。
        OpenFileDialog dialog = new OpenFileDialog();            
        dialog.ShowDialog();            
        string filePath = dialog.FileName;
        //in this list we store the match of 5 years.
        List<string[]> fiveYears = new List<string[]>();
        //open a reader.
        StreamReader tr = new StreamReader(filePath);
        //reaing 1° line.
        string line=tr.ReadLine();
        while (line != null && line != "" && line != "\n")
        {
            //split de line by tabs.
            string[] lineByTabs = line.Split('\t');
           //if the second term equals '5 years'
            if (lineByTabs[1].Equals("5 years"))
            {
                //change from  5 years to 1 month, and to a lonan of 100.
                lineByTabs[1] = "1 month";
                lineByTabs[2] = "100";
                fiveYears.Add(lineByTabs);                   
            }
            line = tr.ReadLine();
        }
        //close reader
        tr.Close();
        //open the file and apend lines.
        TextWriter tw = new StreamWriter(filePath, true);

        foreach (string[] lines in fiveYears)
        {
            tw.WriteLine(lines[0] + "\t" + lines[1] + "\t" + lines[2]);
        }
        tw.Close();

    }
    Dim dialog As OpenFileDialog = New OpenFileDialog
    Dim filePath, line As String
    Dim fiveYears As List(Of String()) = New List(Of String())
    Dim lineByTabs As String()
    Dim tr As StreamReader
    Dim tw As TextWriter
    dialog.ShowDialog()
    filePath = dialog.FileName

    tr = New StreamReader(filePath)

    line = tr.ReadLine()

    While Not line = ""

        lineByTabs = line.Split(vbTab)

        If lineByTabs(1).Equals("5 years") Then

            lineByTabs(1) = "1 month"
            lineByTabs(2) = "100"
            fiveYears.Add(lineByTabs)
        End If
        line = tr.ReadLine()
    End While

    tr.Close()

    tw = New StreamWriter(filePath, True)

    For Each lines As String() In fiveYears
        tw.WriteLine(lines(0) + vbTab + lines(1) + vbTab + lines(2))
    Next
    tw.Close()