如何将字符串写入中间带有换行符的文件

本文关键字:换行符 文件 中间 字符串 | 更新日期: 2023-09-27 18:34:30

我希望能够在文件中添加一些值,同时在两者之间创建空白行。这是我到目前为止的代码:

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

最好的方法是什么?

如何将字符串写入中间带有换行符的文件

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

这是我在这种情况下使用的一个简单的帮助程序方法:

// 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);
}

应该做这个伎俩。

也许有这个循环:

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);
}