2009-04-26 65 views
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 

我期待複製行,其中「貸款期限」 =「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) 

我在畫一個空白的如何進行,並認爲我會尋求幫助。這樣做的

回答

1

一個小丑很醜,但是一個開始。

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

希望它有助於

注: flie在一個新行結束。並且回覆給定的格式(3列)。

+0

謝謝,對於遲到的回覆感到抱歉。 – 2009-05-06 03:54:58

1

方式一:

遍歷文件一次,並且把每名具有5年進入一些陣列。 然後使用File.AppendText(路徑)返回一個StreamWriter。 循環訪問您的數組名稱並將其寫入StreamWriter,然後刷新並關閉。

查看樣例代碼。