2009-04-26 6 views
1

Ich habe eine Tabulator getrennte Textdatei als so:Kopieren von einer Tabulator getrennte Textdatei selbst

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 

Ich suche die Zeilen, in denen „Leihfrist“ = „5 Jahre“, wo "kopieren Leihfrist "=" 1 Monat ", um den Vergleich zu zeigen. Die neuen Zeilen würden am Ende der resultierenden Datei angehängt werden.

Das ultimative Endergebnis ich zu erreichen hoffen, ist dies:

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 

Ich habe darüber mit Visual Basic .NET liebäugelt, und so weit, das ist, was ich mit

habe kommen
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) 

Ich zeichne eine leere, wie weiter zu gehen, und dachte, ich würde um Hilfe bitten.

Antwort

1

Ein wenig hässlich, aber ein Anfang.

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

hoffen, dass es

Anmerkung hilft: flie in einer neuen Zeile enden muss. und folgt dem angegebenen Format (3 Spalten).

+0

Vielen Dank und Entschuldigung für die späte Antwort. –

+0

mach dir keine sorgen hoffe es hilft – vaquito

1

Ein Weg, es zu tun:

Schleife durch die Datei einmal und jeden Namen in eine Reihe mit 5 Jahren setzen. Verwenden Sie dann File.AppendText (Pfad), um einen StreamWriter zurückzugeben. Durchlaufen Sie Ihr Array von Namen und schreiben Sie es in den StreamWriter, dann Flush und Close.

Auschecken zum Beispiel Code.