我编写了一个脚本,从FTP服务器中提取大量CSV文件并下载到网络位置。
此CSV文件的内容遵循我在此链接中提供的示例 File Example
简而言之,我需要:
使用第二行Ords:
后面的12个字符(字母数字)定义一个稍后将在查询中使用的变量。 (A)
GB0000000001
会变成
$OrderVariable = "GB0000000001"
我已阅读
.TrimStart([Characters_to_remove])
但我不确定它会如何跳过第一行,然后如何在接下来的12个字母后删除所有内容。
使用整行,除Ords:
之外的两个信息将此定义为变量,例如
GB0000000001 - 推广活动
会变成
$TitleEvent = "GB0000000001 – Promotion Event"
CSV包含电子邮件需要发送到的所有客户,例如
D|300123123|BBA D|300321312|DDS D|A0123950|BBA D|A0999950|ZZG
我希望将这些项目写入哈希表,我认为这个项目很简单,除非我找不到任何方法来排除它之前的所有内容。
$mytable = Import-Csv -Path $filePath -Header D,Client,Suffix
$HashTable = @{}
foreach ($r in $mytable) {
$HashTable[$r.Client] = $r.Data
}
更新
我已经设法通过以下
将大部分元素放入变量中$target = "\\Messaging"
cd $target
$Clients = Import-Csv example.txt | where {$_ -like "*D|*"}
$Clients = $Clients[1..($Clients.count - 1)]
$Clients | Export-Csv "Test.csv" -NoTypeInformation
但我无法使用自定义标头导入或没有第一个“H |”划界......
更新结束1
我认为这大致是需要的,因为在稍后的查询中我需要定义和使用的唯一元素是客户端本身。
下一个将定义保留为消息内容的所有文本
这是一项促销活动,需要您采取行动。在
您的指示截止日期为2016年9月12日下午2点。
此活动的截止日期已延长。
要通知我们您的指示,您可以发送安全信息。
这可能会在每次大量不同的情况下有所不同,因此不能简单地删除X行数,内容将始终遵循Ords:
(第2行)并在D|
分隔开始时结束。
我需要将大多数其他代码组合在一起我对“着名的最后一句话”非常有信心,并且有一个完整的脚本可以提取我需要的文件,我只是不擅长使用.csv的时候我有他们。
答案 0 :(得分:1)
数据格式灵活,没有全局表格/网格结构,所以让我们使用正则表达式(breakdown),这是一种解析此类文本的通用方法。
$text = [IO.File]::ReadAllText('inputfile.txt', [Text.Encoding]::UTF8)
$data = ([regex]('ORDS: (?<order>.+?) [-–—] (?<title>.+)[\r\n]+' +
'(?<info>[\s\S]+?)[\r\n]+' +
'(?<clients>D\|[\s\S]+?)[\r\n]+' +
'T\|(?<T>\d+)')
).Matches($text) |
forEach {
$g = $_.groups
@{
order = $g['order'].value
info = $g['info'].value -join ' '
clients = $g['clients'].value -split '[\r\n]+' |
where { $_ -match 'D\|(.+?)\|(.+)' } |
forEach {
@{
id = $matches[1]
suffix = $matches[2]
}
}
T = $g['T']
}
}
$data
现在是一条记录(如果文件有多个条目,则为记录数组):
Name Value ---- ----- T 000004 info This is a Promotion Event and action needs to be take... order GB0000000001 clients {System.Collections.Hashtable, System.Collections.Has...
$data.clients
是一系列记录:
Name Value ---- ----- id 300123123 suffix BBA id 300321312 suffix DDS id A0123950 suffix BBA id A0999950 suffix ZZG