2009-04-26 2 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

Litle уродливый, но это начало.

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

Спасибо, и извините за поздний ответ. –

+0

Не беспокойтесь, надеюсь, что это поможет – vaquito

1

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

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

Отъезд например код.

Смежные вопросы