【问题标题】:C#, How to split strings to new line during foreach loop?C#,如何在 foreach 循环期间将字符串拆分为新行?
【发布时间】:2013-11-25 06:00:14
【问题描述】:

使用 Powershell 对象并运行 foreach 循环来获取结果,

我得到了 2 个正确的 IP 地址结果 144.68.205.19 和 144.68.205.22,但它打印在 1 行中,

144.68.205.19144.68.205.22

应该是这样拆分新行的,

144.68.205.19
144.68.205.22

请指教,这里是C#代码,

// Powershell
            Runspace runSpace = RunspaceFactory.CreateRunspace();
            runSpace.Open();
            Pipeline pipeline = runSpace.CreatePipeline();

            Command invokeScript = new Command("Invoke-Command");
            RunspaceInvoke invoke = new RunspaceInvoke();

            // invoke-command -computername compName -scriptblock { get-process }

            ScriptBlock sb = invoke.Invoke("{"+ PowerShellCodeBox.Text +"}")[0].BaseObject as ScriptBlock;
            invokeScript.Parameters.Add("scriptBlock", sb);
            invokeScript.Parameters.Add("computername", TextBoxServer.Text);

    string str = "";

    pipeline.Commands.Add(invokeScript);
    Collection<PSObject> output = pipeline.Invoke();
    foreach (PSObject psObject in output)
    {

        str = str + psObject;
    }

    if (str == ""){
        str = "Error";

        ResultBox.ForeColor = System.Drawing.ColorTranslator.FromHtml("#FF0000");
    }

    ResultBox.Text = str;

【问题讨论】:

  • P.s.w.g 是正确的。有了这些数据,您将不知道第一个 IP 的结束位置和第二个 IP 的开始位置。
  • 如果您确定总会有一个144,请在144 处拆分字符串并在结果字符串前加上它。
  • 不,str = str + psObject; 不会拆分为换行符,您可以附加它们。使用数组或列表来存储它们,或者如果您仍然希望仅将其作为一个字符串,则附加一个换行符。
  • 它是144.68.205.19 和144.68.205.22。他们只是把它放在一条线上。我只想换行而不是放在一起。
  • psObject 是整个 IP 地址吗?如果是这样,只需添加 \r\n: str = str + psObject +"\r\n";

标签: c# asp.net powershell


【解决方案1】:

首先,如果您打算在循环中构建字符串,请查看使用StringBuilder。其次,您永远不会在其中添加新行,但这很容易解决(也可以使用 stringbuilder 的本机方法!)

pipeline.Commands.Add(invokeScript);
Collection<PSObject> output = pipeline.Invoke();

StringBuilder sb = new StringBuilder();
foreach (PSObject psObject in output)
{
    sb.AppendLine(psObject.ToString());
}

【讨论】:

    【解决方案2】:

    您可以在构建 str 时插入一个新行:

    foreach (PSObject psObject in output)
    {
        str += "\n" + psObject;
    }
    

    或使用string.Join

    string str = String.Join("\n", output);
    

    【讨论】:

    • 完全不分裂
    • ResultBox是什么类型?
    • ResultBox 是一个带有Textmode="MultiLine"的asp文本框
    • 我很抱歉。它不起作用的原因是因为我没有重建解决方案并且它没有更新很长时间。我创建了一个新文件,复制了代码然后使用您的示例并且它有效。谢谢
    • @StudentIT 很高兴我能帮上忙。快乐编码:)
    猜你喜欢
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 2013-10-06
    相关资源
    最近更新 更多