ユーザ用ツール

サイト用ツール


構造化テキストをcsv変換

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
構造化テキストをcsv変換 [2023/07/29 02:26] – 改行の追加 Minoru Kijima構造化テキストをcsv変換 [2023/07/29 04:43] (現在) – [PowerShellスクリプト] Minoru Kijima
行 4: 行 4:
  
 ===== 入力テキスト ===== ===== 入力テキスト =====
-<file .txt set.txt>+<file .txt st.txt>
 Name: Convert-StructuredTextToCsv.ps1 Name: Convert-StructuredTextToCsv.ps1
 Length: 1749 Length: 1749
行 92: 行 92:
 } | Export-Csv -Path $ExportCSV -Encoding Default -NoTypeInformation } | Export-Csv -Path $ExportCSV -Encoding Default -NoTypeInformation
 Get-Item -Path $ExportCSV Get-Item -Path $ExportCSV
 +</file>
 +
 +===== Perlスクリプト =====
 +<file .pl str2csv.pl>
 +#!/usr/bin/perl
 +# StructuredText形式からCSV形式に変換
 +#
 +$line = 0;
 +while(<>) {
 +  chomp;
 +  chomp;
 +  s/\s+$//;
 +  # StructurTextの要素分解
 +  ($key, $val) = (split(/:\s*/, $_, 2));
 +  if ($key =~ m/^[\w\-]+$/) {
 +    #カンマを含む行のクオーティング
 +    if ($val =~ m/,/) {
 +      $val = sprintf("\"%s\"", $val);
 +    }
 +    # 出現位置への格納
 +    if (defined($key2Num{$key})) {
 +      $csvList[$key2Num{$key}] = $val;
 +    }
 +    # 項目名出現順の記録
 +    else {
 +      push(@keyList, $key);
 +      push(@csvList, $val);
 +      $key2Num{$key} = scalar(@keyList) - 1;
 +    }
 +  }
 +  # 空行位置でのCSV出力
 +  elsif ($key eq '') {
 +    if ($line == 0) {
 +      printf(" %s\n", join(',', @keyList));
 +    }
 +    if (scalar(@csvList)>0) {
 +      printf("%s\n", join(',', @csvList));
 +      @csvList = ();
 +      $line++;
 +    }
 +  }
 +}
 </file> </file>
構造化テキストをcsv変換.1690597591.txt.gz · 最終更新: by Minoru Kijima