Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.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
Excel 是否可以使用导入Csv将连续分隔符视为一个分隔符?_Excel_Powershell_Export To Csv_Powershell Ise - Fatal编程技术网

Excel 是否可以使用导入Csv将连续分隔符视为一个分隔符?

Excel 是否可以使用导入Csv将连续分隔符视为一个分隔符?,excel,powershell,export-to-csv,powershell-ise,Excel,Powershell,Export To Csv,Powershell Ise,我有一些txt格式的日志文件,其中包含双选项卡列。 我正在使用以下PowerShell: Import-Csv C:\path\to\file\PageLog.txt -Delimiter "`t" | Export-Csv C:\path\to\file\PageLog.csv -NoTypeInformation 所以这里没有什么疯狂的地方,它正在工作,但我最终得到一个空列,带有一个自动生成的H1头。那么,在通过Excel中的“数据”选项卡导入时,我是否可以将这两个选项卡视为一个?或者在导

我有一些txt格式的日志文件,其中包含双选项卡列。 我正在使用以下PowerShell:

Import-Csv C:\path\to\file\PageLog.txt -Delimiter "`t" | Export-Csv C:\path\to\file\PageLog.csv -NoTypeInformation

所以这里没有什么疯狂的地方,它正在工作,但我最终得到一个空列,带有一个自动生成的H1头。那么,在通过Excel中的“数据”选项卡导入时,我是否可以将这两个选项卡视为一个?或者在导出Csv时以某种方式忽略空的H1列?

您应该能够在.Csv上运行搜索/替换功能(将两个连续的选项卡替换为一个,否?)


我不知道导入Csv是否允许
-replace
,但如果不允许,您可以将.Csv文件转换为字符串(请参阅),在其上运行
-replace
,然后将其转换回.Csv。

不幸的是,对于
导入Csv
分隔符只能有一个字符长。这就给你留下了两个选择。第一种方法是对文件使用字符串解析,以获得一个分隔符

(Get-Content C:\path\to\file\PageLog.txt) -replace "`t`t","`t" | Out-File C:\path\to\file\PageLog.temp.txt
Import-Csv C:\path\to\file\PageLog.temp.txt -Delimiter "`t" | Export-Csv C:\path\to\file\PageLog.csv -NoTypeInformation
在这种方法中,您可以跳过导入/导出,只需用逗号替换即可

(Get-Content C:\path\to\file\PageLog.txt) -replace "`t`t",',' | Out-File C:\path\to\file\PageLog.temp.txt
否则,您可以导入带有额外列和筛选器的csv。正如iRon所建议的,如果你只有一个额外的列,你可以简单地排除它:

Import-Csv C:\path\to\file\PageLog.txt -Delimiter "`t" |
    Select-Object * -ExcludeProperty H1 |
    Export-Csv C:\path\to\file\PageLog.csv -NoTypeInformation
如果您有倍数,
Select Object
支持通配符,因此您可以使用
-ExcludeProperty H*
,前提是您的其他列均以
H
开头

否则,可以对列名使用正则表达式

$CSV = Import-Csv C:\path\to\file\PageLog.txt -Delimiter "`t"
$GoodColumns = $CSV |
    Get-Member -MemberType NoteProperty |
    Where-Object {$_.name -notmatch '^H\d+$'} |
    Select-Object -ExpandProperty Name
$CSV | Select-Object $GoodColumns | Export-Csv C:\path\to\file\PageLog.csv -NoTypeInformation

使用
。|选择*-ExcludeProperty H1 |…
,请参阅:导入后排除H1列是最快速、最简单的解决方案。起初我尝试了Get-Content cmdlet,但似乎-replace不是一个有效的参数???@Heath我忘记包装Get-Content命令,
-replace
不是一个参数,而是regex操作符。答案更新。是的,更新后的答案也很有效。非常感谢。你是对的,搜索/替换是我的第一个想法,但是我现在还有很多事情要做,所以我不想对日志文件进行太多的手动修改。谢谢你的链接,顺便说一句,非常好。