2013-10-09 30 views
0

我希望能够在文件之间创建空白行的同时写入一些值。这里是我到目前为止的代码:如何使用linebreak来编写字符串文件?

TextWriter w_Test = new StreamWriter(file_test); 
foreach (string results in searchResults) 
{ 
    w_Test.WriteLine(Path.GetFileNameWithoutExtension(results)); 
    var list1 = File.ReadAllLines(results).Skip(10); 
    foreach (string listResult in list1) 
    { 
     w_Test.WriteLine(listResult); 
    } 
} 
w_Test.Close(); 

这与下面的输出创建'Test'

result1 
listResult1 
listResult2 
result2 
listResult3 
result3 
result4 

我想写结果让每个结果块是21线的规模写入前下一个,例如

result1 
(20 lines even if no 'listResult' found) 
result2 
(20 lines even if no 'listResult' found) 
etc....... 

这样做的最好方法是什么?

回答

1
TextWriter w_Test = new StreamWriter(file_test); 
foreach (string results in searchResults) 
{ 
    int noLinesOutput = 0; 
    w_Test.WriteLine(Path.GetFileNameWithoutExtension(results)); 
    noLinesOutput++; 
    var list1 = File.ReadAllLines(results).Skip(10); 
    foreach (string listResult in list1) 
    { 
     w_Test.WriteLine(listResult); 
     noLinesOutput++; 
    } 
    for (int i = 20; i > noLinesOutput; i--) 
     w_Test.WriteLine(); 
} 
w_Test.Close(); 
+0

使用,因为它仅使用一次,并在当前的代码很好地坐在这个答案。 –

+0

如果文件很大,则使用'File.ReadLines'而不是'ReadAllLines',因为前者不需要读取整个文件。此外,即使有超过20行,该解决方案也会输出文件的所有行。它是否正确? –

+0

该解决方案从我自己创建的文件中手动提取数据,所以如果结果超过20,那么我可以增加本节中的值。我会将它改为'File.ReadLines',欢呼。 –

0

这里有一个简单的辅助方法,我在这种情况下使用:

// pad the sequence with 'elem' until it's 'count' elements long 
static IEnumerable<T> PadRight<T>(IEnumerable<T> enm, 
    T elem, 
    int count) 
{ 
    int ii = 0; 
    foreach(var elem in enm) 
    { 
     yield return elem; 
     ii += 1; 
    } 
    for (; ii < count; ++ii) 
    { 
     yield return elem; 
    } 
} 

然后

foreach (string listResult in 
    PadRight(list1, "", 20)) 
{ 
    w_Test.WriteLine(listResult); 
} 

应该做的伎俩。

0

也许这个循环:

var lines = 20; 
foreach(string fullPath in searchResults) 
{ 
    List<string> allLines = new List<string>(); 
    allLines.Add(Path.GetFileNameWithoutExtension(fullPath)); 
    int currentLine = 0; 
    foreach(string line in File.ReadLines(fullPath).Skip(10)) 
    { 
     if(++currentLine > lines) break; 
     allLines.Add(line); 
    } 
    while (currentLine++ < lines) 
     allLines.Add(String.Empty); 
    File.WriteAllLines(fullPath, allLines); 
} 
相关问题