Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# StringBuilder每行写入的字符数_C#_Stringbuilder_Maxlength - Fatal编程技术网

C# StringBuilder每行写入的字符数

C# StringBuilder每行写入的字符数,c#,stringbuilder,maxlength,C#,Stringbuilder,Maxlength,您好,我已经创建了一些C#代码,该代码正在使用StringBuilder对象写入.txt文件,看起来一切正常,但问题是每行正好需要200个字符。例如,当程序将一行中的字符串变量值设置为10个字符(该值随字符数的变化而变化)时,该行必须包含190个空格。这是我的代码示例: if (File.Exists(DLFile)) { using (StreamWriter sw = new StreamWriter(DLFile)) { StringBuilder stringBu

您好,我已经创建了一些
C#
代码,该代码正在使用
StringBuilder
对象写入.txt文件,看起来一切正常,但问题是每行正好需要200个字符。例如,当程序将一行中的字符串变量值设置为10个字符(该值随字符数的变化而变化)时,该行必须包含190个空格。这是我的代码示例:

if (File.Exists(DLFile))
{
  using (StreamWriter sw = new StreamWriter(DLFile))
    {
      StringBuilder stringBuilder = new StringBuilder();
      stringBuilder.Append("001" + partNumber + " ").AppendLine(); 
      String innerString = stringBuilder.ToString();
      sw.WriteLine(innerString);
      sw.Close();
    }
}

有一个名为“partNumber”的字符串
变量
,长度不同。有时长度可以是15或14或10,但这个长度和空白空间的总和可以是200(确切数量)。有人能帮我吗?

只要使用
PadRight
(或者
padlight
,如果合适的话)就可以了,因为它的设计就是为了实现这一点

sw.WriteLine(("001" + partNumber).PadRight(200));

只需使用
PadRight
(或者
padlight
,如果合适的话)就可以了,因为它的设计就是为了做到这一点

sw.WriteLine(("001" + partNumber).PadRight(200));

简单地计算一下,然后呢

要使其(稍微)更加防错,请执行以下操作:

...

var h = "001" + partNumber;
stringBuilder.Append( h );

var a = 200 - h.Length;
if ( a > 0 )
{
    stringBuilder.Append( ' ', a );
}

...

简单地计算一下,然后呢

要使其(稍微)更加防错,请执行以下操作:

...

var h = "001" + partNumber;
stringBuilder.Append( h );

var a = 200 - h.Length;
if ( a > 0 )
{
    stringBuilder.Append( ' ', a );
}

...
您可以使用重复空格:

int whiteSpacesLength = 200 - partNumber.Length; // assuming partNumber is never > 200
string whiteSpaces = new String(' ', whiteSpacesLength);
string innerString = partNumber + whiteSpaces;

(因此我认为没有理由在此处使用
StringBuilder

您可以使用重复空格:

int whiteSpacesLength = 200 - partNumber.Length; // assuming partNumber is never > 200
string whiteSpaces = new String(' ', whiteSpacesLength);
string innerString = partNumber + whiteSpaces;


(因此我认为没有理由在这里使用
StringBuilder

当然。只需看看这个方法,并指定实现此目的的格式

在您的情况下,这意味着要做以下事情:

string line = String.Format("{0,-200}", input);

当然。只需看看这个方法,并指定实现此目的的格式

在您的情况下,这意味着要做以下事情:

string line = String.Format("{0,-200}", input);

使用一个有200个空格的已定义字符串,然后执行如下子字符串

string space200 = "                                                                                                                                                                                                                                                                                                                                                                                    ";
      if (File.Exists(DLFile))
      {
        using (StreamWriter sw = new StreamWriter(DLFile))
        {
          StringBuilder stringBuilder = new StringBuilder();
          stringBuilder.Append("001").Append(partNumber).Append(space200.Substring(stringBuilder.ToString().Length, space200.Length - stringBuilder.ToString().Length)).AppendLine();

          String innerString = stringBuilder.ToString();
          sw.WriteLine(innerString);
          sw.Close();
        }
      }

使用一个有200个空格的已定义字符串,然后执行如下子字符串

string space200 = "                                                                                                                                                                                                                                                                                                                                                                                    ";
      if (File.Exists(DLFile))
      {
        using (StreamWriter sw = new StreamWriter(DLFile))
        {
          StringBuilder stringBuilder = new StringBuilder();
          stringBuilder.Append("001").Append(partNumber).Append(space200.Substring(stringBuilder.ToString().Length, space200.Length - stringBuilder.ToString().Length)).AppendLine();

          String innerString = stringBuilder.ToString();
          sw.WriteLine(innerString);
          sw.Close();
        }
      }

是否有理由使用
StringBuilder
而不直接写入流?哦,没有具体的理由,只是为了执行良好的编程实践请确保这不是常见的误解。不能仅仅为了“提高性能”而用
StringBuilder
替换所有字符串连接。这样做通常只在循环体内部有用,即当我们谈论数百或数千个连接时。在您的示例中,您甚至已经可以访问流,因此,完全不连接字符串并直接写入流更为有效。是否有理由使用
StringBuilder
而不直接写入流?哦,没有具体的理由仅用于执行良好的编程实践请确保这不是常见的误解。不能仅仅为了“提高性能”而用
StringBuilder
替换所有字符串连接。这样做通常只在循环体内部有用,即当我们谈论数百或数千个连接时。在您的示例中,您甚至已经可以访问流,因此完全不连接字符串并直接写入流更有效。这个工具可以给我这个长度结果吗?001+零件号+右侧焊盘(200)=200@MarcoSomoza你可以随时运行它,自己去发现。您可能还想查看有关该方法的文档,以便更清楚地了解它的作用。该工具可以为我提供此长度结果吗?001+零件号+右侧焊盘(200)=200@MarcoSomoza你可以随时运行它,自己去发现。您可能还想查看有关该方法的文档,以更清楚地了解它的作用。提示我一个错误:startIndex不能大于字符串的长度。参数名称:startIndex提示我一个错误:startIndex不能大于字符串的长度。参数名称:startIndex