テキストで作られた表をCSVファイルにしたNo.41510
リリーパパ さん 24/12/10 01:49
 

お世話になります
下記のようなテキストで作られた表にそれぞれの場所に”、”を置きたいのですが何
か方法はないでしょうか。
ルーラーの決められた場所に”、”を挿入するとか置換でうまい方法が無いかアドバ
イスを頂きたいのです。

このままExcelにコピー&ペーストしても一番左のセルに全部入ってしまい難儀して
います。





    Prefix              Entity                         Continent ITU   CQ  
 Code
    ___________________ ________________________________________ _____ _____
 ___
    (1)                 Spratly Is.                        AS    50    26  
 247
    1A(1)               Sovereign Military Order of Malta  EU    28    15  
 246
    3A*                 Monaco                             EU    27    14  
 260
    3B6,7               Agalega & St. Brandon Is.          AF    53    39  
 004
    3B8                 Mauritius                          AF    53    39  
 165
    3B9                 Rodrigues I.                       AF    53    39  
 207
    3C                  Equatorial Guinea                  AF    47    36  
 049
 

[ ]
RE:41510 テキストで作られた表をCSVファNo.41511
こみやんま さん 24/12/10 05:24
 
「ルーラーの決められた場所」という表現をしているということは、「縦線」的に(=
同x座標位置に)「、」を挿入したいんでしょうか?

表が人間的に整形されてるので(まぁ今のConversation AIはこれを余裕で解釈します
が)、
エディタ的にやるなら...

「示されたデータは全て空白なりなんなりで文字が埋まっている」ことを利用して、
単純に
■「ALT」押しながら(ルーラーのどこかのメモリ位置と同じ位置で)縦に線を描くよ
うなイメージで「マウスを縦にスーッ」と縦に動かす。
■そうするとエディタ上で縦に線が入るので、そこで「、」を入力すれば、

これで縦一直線に「、」が一気に入ると思うんですが...

(「幅ゼロ」の「BOX選択」的な感じ。その選択状態で「複数箇所同時入力」)




■目的は「、」を入れることではなく、CSVにしたいのであれば、

上の要領で、線を引くかのごとく「|」を入れます。

    Prefix             | Entity                         Con|tinent| ITU  | C
Q   | Code
    ___________________| __________________________________|______| _____| _
____| ___
    (1)                | Spratly Is.                       | AS   | 50   | 2
6   | 247
    1A(1)              | Sovereign Military Order of Malta | EU   | 28   | 1
5   | 246
    3A*                | Monaco                            | EU   | 27   | 1
4   | 260
    3B6,7              | Agalega & St. Brandon Is.         | AF   | 53   | 3
9   | 004
    3B8                | Mauritius                         | AF   | 53   | 3
9   | 165
    3B9                | Rodrigues I.                      | AF   | 53   | 3
9   | 207
    3C                 | Equatorial Guinea                 | AF   | 47   | 3
6   | 049


になります。


■置換え
エディタの「置換」で、「正規表現にチェック」を入れて、
検索欄に「 *\| *」、
置換欄に「\t」


これでデータ部分については、タブ区切りとして成立してるんじゃないでしょうか?

[ ]
RE:41511 テキストで作られた表をCSVファNo.41513
リリーパパ さん 24/12/10 09:53
 
こみやんま様、さっそくのコメントありがとうございます

>「ルーラーの決められた場所」という表現をしているということは、「縦線」的に
>(=同x座標位置に)「、」を挿入したいんでしょうか?

はい、そのとうりです。ただ340行もあるのでChatGPTではコピー&ペーストではでき
ないと言われてしまいました。

>■「ALT」押しながら(ルーラーのどこかのメモリ位置と同じ位置で)縦に線を描く
>ようなイメージで「マウスを縦にスーッ」と縦に動かす。
>■そうするとエディタ上で縦に線が入るので、そこで「、」を入力すれば、

ALTを押しながら選択をするとBOX選択ができるのですね。初めて知りました。(勉強
不足ですね)しかしALTだけだと文字列の選択は出来ても空白の部分の選択はできな
かったのでShift+ALTで空白上の選択ができました。

    (1)  |Spratly Is.                      |AS|50|26|247
    1A(1)|Sovereign Military Order of Malta|EU|28|15|246
    3A*  |Monaco                           |EU|27|14|260
    3B6,7|Agalega & St. Brandon Is.        |AF|53|39|004
    3B8  |Mauritius                        |AF|53|39|165
    3B9  |Rodrigues I.                     |AF|53|39|207

ありがとうございます。

もうひとつ置き換えで質問が有るのですが、一番左側の文字には3B6,7のように
「、」を含んでいるものがあり全てを「”」でくくりたいのですがどのような正規表
現で実現できますか?

[ ]
RE:41513 テキストで作られた表をCSVファNo.41515
秀丸担当 さん 24/12/10 12:19
 
まず、カンマ「,」区切りにされるという場合、こみやんまさんが書かれている以下
の方法の代わりに、置換欄を「,」にするといいです。

>■置換え
>エディタの「置換」で、「正規表現にチェック」を入れて、
>検索欄に「 *\| *」、
>置換欄に「\t」

「"」でくくるという場合は、「","」にするといいと思います。
この場合、行頭と行末に「"」が無いので、別途行頭と行末に追加するといいです。

行頭を置換でする場合は検索欄に「^」、置換欄に「"」とするといいです。
行末を置換でする場合は検索欄に「$」、置換欄に「"」とするといいです。

[ ]
RE:41513 テキストで作られた表をCSVファNo.41516
こみやんま さん 24/12/10 12:30
 
>> もうひとつ置き換えで質問が有るのですが、一番左側の文字には3B6,7のように
>「、」を含んでいるものがあり全てを「”」でくくりたいのですがどのような正規
>表現で実現できますか?

これは、データ自体に「,」が含まれている場合に、
正しくCSVとして認識するように" "でデータ部を囲みたいということと思いますが、

■安全なのはExcelに処理させる
安全なのは先の投稿

>> 検索欄に「 *\| *」、
>> 置換欄に「\t」

にあるように「罫線→タブ記号」にします。

Excelの設定で、「セル全体」の「書式設定」を「文字列」にしてから、
「データ部分全体」を「秀丸→Excel」へと貼り付けます。
そして、CSVとして保存します。
これで正しく必要な部分のみに" "が付与されます。
さらにデータ自体に「"」があれば、「\"」という形で\が付与されます。


■エディタだけで簡易的にやるなら
「,」があるデータ部には同時に「"」が存在しないことは担保されている、というこ
とであれば
先の投稿の

>> 検索欄に「 *\| *」、
>> 置換欄に「\t」

にあるように「罫線→タブ記号」にした後、

検索欄:([^\t]+,[^\t]+)
置換欄:"\1"

みたいなので簡易的には実現できます。



あるいは、一番最初に、
そのようにデータ部に「,」がありそうな「列全体」をざっくりと
矩形選択しておいて、

検索欄:([^\s]+,[^\s]+)
置換欄:"\1"

みたいにするのも運用によってはよいかもしれません。

[ ]