Vb.net 写入固定宽度的文本文件

Vb.net 写入固定宽度的文本文件,vb.net,Vb.net,我正在编写一个创建固定宽度文本文件的应用程序。我已经写的工作还不错,但我想知道是否有一个更有效的方法。(所谓高效,我指的是执行速度更快,而不是使用更少的代码。) 以下是我创建的将字符串填充或修剪到所需长度的函数: Private Function ToLen(ByRef strLen As String, ByRef intLen As Integer) As String Dim L As Integer = Len(strLen) If L < intLen Then

我正在编写一个创建固定宽度文本文件的应用程序。我已经写的工作还不错,但我想知道是否有一个更有效的方法。(所谓高效,我指的是执行速度更快,而不是使用更少的代码。)

以下是我创建的将字符串填充或修剪到所需长度的函数:

Private Function ToLen(ByRef strLen As String, ByRef intLen As Integer) As String

    Dim L As Integer = Len(strLen)
    If L < intLen Then
        Return strLen & Strings.Space(intLen - L)
    ElseIf L = intLen Then
        Return strLen
    Else
        Return Strings.Left(strLen, intLen)
    End If

End Function

我建议使用新的.NET方法进行字符串操作,而不是使用旧式的VB6函数,例如:

Private Function ToLen(text As String, length As Integer)
    If text.Length > length Then
        Return text.SubString(0, length)
    Else
        Return text.PadRight(length)
    End If
End Function
然后,在写入文件时,不要将字符串连接在一起。多次调用
Write
会更有效:

Using MyFile1 As New StreamWriter("C:\Temp\MyFile.txt")
    Do
        ' loop through records
        MyFile1.Write(ToLen(Item1, 10))
        MyFile1.Write(ToLen(Item2, 50))
        MyFile1.WriteLine(ToLen(Item3, 25))
    Loop
End Using

您可能想尝试对这个问题进行代码检查。我会使用一些固定大小的字段来衡量string.Format的性能。谢谢你的评论。我还没听说过CodeReview,也不知道它的格式有这样的灵活性。你无法修复文件编写程序的性能。慢的部分是写文件,它比处理器和代码慢几个数量级。你需要买更多的内存来加快速度。SSD也不会有什么坏处。@Hans Passant-我知道这一点,我理解你的观点,但这个概念可能也适用于其他情况。我只是在这里寻找编码效率。虽然差别只有百分之几,但对于较长或较短的字符串,SubString和PadRight方法确实会稍微提高速度。但是,对于已经达到所需长度的字符串,PadRight方法添加了重要的处理,因此我在ToLen函数中添加了“ElseIf text.length=length Then…Return strLen”。顺便说一句,关于.NET与VB6样式的字符串处理,这是一个很好的观点。谢谢你,史蒂文@卡本很乐意帮忙。我想知道检查长度是否相同是否会有所不同。根据MSDN,
PadRight
返回原始字符串,如果它们相同,但显然没有那么有效:)我也想过使用
string.Format
,但我认为如果目标是速度,那么效率就不会那么高,因为它必须解析格式字符串和所有内容。
Using MyFile1 As New StreamWriter("C:\Temp\MyFile.txt")
    Do
        ' loop through records
        MyFile1.Write(ToLen(Item1, 10))
        MyFile1.Write(ToLen(Item2, 50))
        MyFile1.WriteLine(ToLen(Item3, 25))
    Loop
End Using