копирование текста из текстового файла с разделителями - PullRequest
1 голос
/ 27 апреля 2009

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

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)

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

Ответы [ 2 ]

1 голос
/ 27 апреля 2009

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

// 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 столбца).

1 голос
/ 27 апреля 2009

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

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

Проверьте File.AppendText документацию для примера кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...