копирование из текстового файла с разделителями табуляции в себя

У меня есть текстовый файл с разделителями табуляции:

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

Я играл с этим с Visual Basic .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)

Я не знаю, как действовать дальше, и подумал, что попрошу помощи.


person Nader Farhat    schedule 26.04.2009    source источник


Ответы (2)


Немного некрасиво, но это начало.

//c#

        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();

    }

'vb.net

    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()

Надеюсь, поможет

примечание: слово должно заканчиваться новой строкой. и соответствует заданному формату (3 столбца).

person vaquito    schedule 26.04.2009
comment
Спасибо, и извините за поздний ответ. - person Nader Farhat; 06.05.2009

Один из способов сделать это:

Прокрутите файл один раз и поместите каждое имя с 5 годами в некоторый массив. Затем используйте File.AppendText(path) для возврата StreamWriter. Прокрутите свой массив имен и запишите его в StreamWriter, затем слейте и закройте.

Ознакомьтесь с документацией File.AppendText например код.

person Halvard    schedule 26.04.2009