【问题标题】:Import from CSV to File从 CSV 导入到文件
【发布时间】:2018-05-15 23:20:48
【问题描述】:

我正在尝试编写一个脚本来提取 2 个变量“代码”和“描述”并将它们写入此模板。

<CodeDescriptions>
  <CodeDescription>
    <Code>*code*</Code>
    <Description>*description*</Description>
  </CodeDescription>
</CodeDescriptions>

对于它找到的每组变量,它都会编写模板并插入变量。

我的 CSV 文件如下所示

code,description
0001,first
0002,second
0003,third

到目前为止我的代码:

$DB = Import-Csv $PSScriptRoot\Variables.csv

Set-Content $PSScriptRoot\file.txt

    foreach ($Entry in $DB) {
        $First = $Entry.First
        $Second = $Entry.Second

        # Echo values to verify result (test purposes only)
        Write-Host $First
        Write-Host $Second

        # Write template to file
         $var= 
         "<CodeDescriptions>
             <CodeDescription>
                <Code>*code*</Code>
                <Description>*description*</Description>
             </CodeDescription>
          </CodeDescriptions>"

         Add-Content $PSScriptRoot\file.txt $var

        # replace inserts with correct variables
    }

正如我所说,我仍然熟悉代码,我的目标是一次从 1 行中提取 2 个变量。然后将模板写入具有正确变量的文件并循环,直到输入所有变量。

成品应该是这样的

<CodeDescriptions>
  <CodeDescription>
    <Code>0001</Code>
    <Description>first</Description>
  </CodeDescription>
</CodeDescriptions>
<CodeDescriptions>
  <CodeDescription>
    <Code>0002</Code>
    <Description>second</Description>
  </CodeDescription>
</CodeDescriptions>
<CodeDescriptions>
  <CodeDescription>
    <Code>0003</Code>
    <Description>third</Description>
  </CodeDescription>
</CodeDescriptions>

【问题讨论】:

  • 所以你有从 csv 中提取的变量然后你想将它们打印为 xml?请编辑您的答案以使其更清晰
  • 为什么要为 2 个变量($First$Second)分配相同的值 ($Entry),为什么要为此使用子表达式 ($())?您的 CSV 的结构是什么?您在哪里阅读 XML(我想那是您的模板)?
  • 我已更新以在描述中添加更多内容。将尝试正确更新代码

标签: powershell csv export


【解决方案1】:

你有两个问题。

首先,Import-Csv 根据第一行的标题定义属性的名称,所以你的 foreach 循环是这样开始的:

foreach ($Entry in $DB) {
    $First = $Entry.First
    $Second = $Entry.Second

应该这样开始:

foreach ($Entry in $DB) {
    $Code = $Entry.Code
    $Description = $Entry.Description

然后你需要在你的$var 中将*code* 替换为$Code*description* 替换为$Description(或者跳过中间变量,只写:

Add-Content $PSScriptRoot\file.txt @"
<CodeDescriptions>
    <CodeDescription>
        <Code>$Code</Code>
        <Description>$Description</Description>
    </CodeDescription>
</CodeDescriptions>
"@

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多