51

Emacs には、org-mode という名前の非常に優れた拡張機能があります。

CSV ファイルを簡単に org-mode に読み込むことができるようにしたいと考えています。私が見つけたのは table-import または table-capture だけで、簡単に言えば、ほぼうまく動作しません。

私の問題の一部は、カンマを含むテキスト文字列であることに注意してください。1,2,3,4 は 1,2,"3,4" とは異なります。

csvファイルを組織モード形式に変換するために実行できる関数またはperlスクリプトはありますか?

ありがとう!

4

5 に答える 5

85

組織モードのマニュアルから:

CC | アクティブな領域をテーブルに変換します。すべての行に 1 つ以上のタブ文字が含まれている場合、関数は素材がタブで区切られていると想定します。すべての行にコンマが含まれている場合、コンマ区切り値 (CSV) が想定されます。そうでない場合、行は空白でフィールドに分割されます。プレフィクス引数を使用して特定のセパレータを強制することができます: Cu は CSV を強制し、Cu Cu は TAB を強制し、数値引数 N は少なくとも N 個の連続したスペースを指定するか、代わりに TAB がセパレータになることを示します。アクティブなリージョンがない場合、このコマンドは空の Org テーブルを作成します。

データを組織ファイルに貼り付けて選択し、実行するだけですC-u C-c |

于 2009-08-07T15:01:31.987 に答える
5

CSV を特に org-mode tablesに変換したいと思っていると思います。そうでない場合は、質問の出力形式についてより明確にすることをお勧めします。

このような何かがそれを行うか、少なくともハッキングできる出発点を得る必要があります:

  #!/usr/bin/perl

  use strict;
  use warnings;

  use Text::CSV;

  my $csv = Text::CSV->new();

  while ( my $line = <DATA> ) {
    if ( $csv->parse( $line )) {
      my $str = join '|' , $csv->fields();
      print "|$str|\n";
    }
  }


  __DATA__
  1,2,3,4
  1,2,"3,4"
于 2009-08-07T01:43:12.257 に答える
4

これを試して:

;; Insert a file and convert it to an org table
(defun aleblanc/insert-file-as-org-table (filename)
  "Insert a file into the current buffer at point, and convert it to an org table."
  (interactive (list (ido-read-file-name "csv file: ")))
  (let* ((start (point))
    (end (+ start (nth 1 (insert-file-contents filename)))))
    (org-table-convert-region start end)
    ))
于 2009-09-11T14:59:33.230 に答える