我有一個非分隔文本文件,並且希望解析它以在特定位置添加製表符來分隔列。這些列有時爲空或長度不同,這就是爲什麼我需要爲這些特定點添加製表符。幾年前,我在網上找到了使用批次的答案,但現在找不到它或代碼。我已經有了下面的代碼來替換文件中的兩個以上的空格,但是這並不代表這些列是空的時候。將製表符添加到具有空列和可變長度列的非分隔文本文件中
gc $FileToOpen | % { $_ -replace ' +',"`t" } | set-content $FileToSave
因此,我需要讀取每一行,但只能讀取它的一部分(一定數量的字符)並在每個部分後面添加標籤。
下面是數據文件的樣本中,頂行是頭和數據行具有在它們之間沒有空行:
MRUN Number Name X Exception Reason Data CDM# Quantity D.O.S
000000 00000000 Name W MODIFIER CANNOT BE FILED WITHOUT 08/13/2015 0000000 0 08/13/2015
000000 00000000 Name W MODIFIER CANNOT BE FILED WITHOUT 0000000 0 08/13/2015
第二數據行缺少數據。
使用安斯加爾的回答,我的代碼,並找到空字段:
gc $FileToOpen |
? { $_ -match '^(.{8})(.{12})(.{20})(.{3})(.{34})(.{62})(.{10})(.{22})(.{10})$' } |
% { "{0}`t{1}`t{2}`t{3}`t{4}`t{5}`t{6}`t{7}`t{8}" -f $matches[1].Trim(), $matches[2].Trim(), $matches[3].Trim(), $matches[4].Trim(), $matches[5].Trim(), $matches[6].Trim(), $matches[7].Trim(), $matches[8].Trim(), $matches[9].Trim() } |
Set-Content $FileToSave
感謝您的耐心安斯加爾,我知道,我試了一下!我真的很感謝幫助!
你是對的Ansgar,雖然我更期待的想法(援助)比期望有人爲我寫代碼。 –
文件的列總是從每行的特定位置開始,如果列爲空,則只有空格填充到下一列的起始位置。列的寬度不相同,但每列之間至少有2個空格。 –
正則表達式中字符計數的總和爲181.您的示例輸入只有130個字符寬。請提供有效的樣本輸入*和*您從中獲得的輸出。確保兩個樣本都縮進了4個空格,所以它們的格式正確。您可能會混淆敏感數據,但請確保不要更改行的長度。 2或3條線就足夠了。 –