アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
区切り文字の調整方法について教えて下さい。
現在下記のようなスペースでカラム合わせされたデータが
''''''''''''''''''''''''''1''''''''''''0.000000E+00'''''0.000000E+00
''''''''''''''''''''''''''2''''''''''''0.000000E+00'''''0.000000E+00
''''''''''''''''''''''''''3''''''''''''0.000000E+00'''''0.000000E+00
''''''''''''''''''''''''''4''''''''''''0.000000E+00'''''0.000000E+00
''''''''''''''''''''''''''5''''''''''''0.000000E+00'''''0.000000E+00
''''''''''''''''''''''''''6''''''''''''0.000000E+00'''''0.000000E+00
''''''''''''''''''''''''''7''''''''''''0.000000E+00'''''0.000000E+00
''''''''''''''''''''''''''8''''''''''''0.000000E+00'''''0.000000E+00
''''''''''''''''''''''''''9''''''''''''0.000000E+00'''''0.000000E+00
'''''''''''''''''''''''''10''''''''''''0.000000E+00'''''0.000000E+00
'''''''''''''''''''''''''11''''''''''''0.000000E+00'''''0.000000E+00
'''''''''''''''''''''''''12''''''''''''0.000000E+00'''''0.000000E+00
'''''''''''''''''''''''''13''''''''''''0.000000E+00'''''0.000000E+00
'''''''''''''''''''''''''14''''''''''''0.000000E+00'''''0.000000E+00
'''''''''''''''''''''''''15''''''''''''0.000000E+00'''''0.000000E+00
'''''''''''''''''''''''''16''''''''''''0.000000E+00'''''0.000000E+00
'''''''''''''''''''''''''17''''''''''''0.000000E+00'''''0.000000E+00
'''''''''''''''''''''''''18''''''''''''0.000000E+00'''''0.000000E+00
'''''''''''''''''''''''''19''''''''''''0.000000E+00'''''0.000000E+00
'''''''''''''''''''''''''20'''''''''''-0.370858E-03''''-0.253661E-03
'''''''''''''''''''''''''21'''''''''''-0.538114E-03''''-0.236461E-03
'''''''''''''''''''''''''22'''''''''''-0.638430E-03''''-0.440598E-03
以下継続

あります。質問掲示板の都合上、[半角スペース]を[']で代替しております。
その時にそのデータを
1 0.00E+00 0.00E+00
2 0.00E+00 0.00E+00
3 0.00E+00 0.00E+00
4 0.00E+00 0.00E+00
5 0.00E+00 0.00E+00
6 0.00E+00 0.00E+00
7 0.00E+00 0.00E+00
8 0.00E+00 0.00E+00
9 0.00E+00 0.00E+00
10 0.00E+00 0.00E+00
11 0.00E+00 0.00E+00
12 0.00E+00 0.00E+00
13 0.00E+00 0.00E+00
14 0.00E+00 0.00E+00
15 0.00E+00 0.00E+00
16 0.00E+00 0.00E+00
17 0.00E+00 0.00E+00
18 0.00E+00 0.00E+00
19 0.00E+00 0.00E+00
20 -3.71E-04 -2.54E-04
21 -5.38E-04 -2.36E-04
22 -6.38E-04 -4.41E-04
以下継続

のように
1列目の前にあるスペースは全部削除して、左に詰め
2列目以降のカラム合わせのためにあるスペースは全部削除して一つの区切り文字(たとえば半角スペースやカンマ)
に置き換える方法を教えて頂きたいです。ファイルは連番でdata_1.txtから現在の所data_1051.txtまであるのですが最終的にいくつになるのか不定です。下図が少ない場合はエクセルで対応も可能だったのですが、数が多すぎて処理しきれなくなっております。
batファイルで何とかなるかやってみたのですが、スペースの文字が不定かつ、最初の列の処理で詰まってしまいました。
すみませんが、お力をお貸しください。

質問者からの補足コメント

  • No.1のご回答を頂いた tatsu99様
    コマンドプロンプトを実施した時のスクリーンショットを添付します。

    「区切り文字の調整方法について教えて下さい」の補足画像1
      補足日時:2019/12/12 11:24

A 回答 (3件)

以下のスクリプトを作成します。

(sampl.rbとします)
コマンドプロンプトで
ruby sample.rb 出力フォルダ名
と入力すると、変換後のテキストファイルが出力フォルダの下に作成されます。
出力時の区切り文字はカンマにしてあります。
区切り文字を変える場合は、oline = elms.join(",")の行を変えてください。
-------------------------------------------
# coding:WINDOWS-31J
def main()
if ARGV.count != 1
print "#{$0} 出力フォルダ名\n"
exit(10)
end
dname = ARGV.shift #出力フォルダ名
if File.directory?(dname) == false
print "出力フォルダ名エラー:#{dname}\n"
exit(10)
end
#ファイル一覧取得
files = Dir.glob("data_*.txt")
#各ファイル毎に以下の処理を行う
files.each do |file|
File.open(dname + "\\" + file,"w") do |outf|
File.open(file) do |inf|
#最後まで読み込む
while line = inf.gets
elms = line.chomp.split(nil)
oline = elms.join(",")
outf.print oline,"\n"
end
end
end
end
end
main()
    • good
    • 1
この回答へのお礼

前回に引き続き、ありがとうございます。
対象ファイルがある中に、sample.rbを配置した後に
ruby sample.rb C:\Users\user\Desktop\新しいフォルダー\test
のように実施してみたのですが、フォルダの中には何も入ってきませんでした。
よくよくファイルを確認していくと
data_*.txt
の列の数がファイルによっては4列だったり、5列目のデータがあったりと不定だったりするのがまずいのでしょうか?

お礼日時:2019/12/12 11:22

elms = line.chomp.split(nil)ですが


1.まず、改行コードを削除します。(line.chomp)
2.その結果に対して、空白文字で分割を行います。
splitで分割しますが
splitの引数にnilを指定した場合、以下の特別な処理を行います。
①1行の文字列の前後の空白類文字を削除します。
②空白類文字列で分割します。
空白類文字列とは半角スペース及びタブのことです。カンマは含みません。

これで、elmsに配列として各項目が格納されます。(空白類文字列は一切ありません)

出力時は
oline = elms.join(",")
です。各項目にカンマをつけて、文字列をつなぎ合わせます。


>そうだとしたら、今回は直接関係なくて申し訳ないのですが、
>今回のようにスペースで区切られているのでなく、大量の,やtabで区切られている時は
>elms = line.chomp.split(',')
>や
>elms = line.chomp.split(’/t')
>のようになるのでしょうか?

原則、それであっています。但し、前後の区切り文字を削除してはくれませんの注意してください。
    • good
    • 0
この回答へのお礼

詳しい説明ありがとうございます。
nil構文はかなり便利なものですね。今度自作する時は使用させていただきます。

また、,の時など、空白以外の区切り文字の時は、あらかじめ区切り文字を空白に変えてからの方が良さそうですね。そうすればnil構文が使用できる。
ありがとうございます。

お礼日時:2019/12/12 13:04

「data_1.txtから現在の所data_1051.txtまである」とかかれています。


画像をみるとdate_になっています。(data_ではなく)
date_が正しいなら、
files = Dir.glob("data_*.txt")を
files = Dir.glob("date_*.txt")に変えてください。
    • good
    • 0
この回答へのお礼

すみません。
観測機器の名称設定エラーでした。
ありがとうございます。
実施しなおしてみた結果、無事に変換してくれました。
それでデータベースにデータを載せることができます。

教えて下さい。
スペースがたくさんあるのを
最初は左詰めにしろ
次の列からは,のみに変換しろ
という命令は
elms = line.chomp.split(nil)
oline = elms.join(",")
の部分でしょうか?
elms = line.chomp.split(nil)の部分のnilで空白を削除した後に
oline = elms.join(",")の部分でカンマ区切りで接続しなおせ
という感じでよろしいでしょうか?

そうだとしたら、今回は直接関係なくて申し訳ないのですが、
今回のようにスペースで区切られているのでなく、大量の,やtabで区切られている時は
elms = line.chomp.split(',')

elms = line.chomp.split(’/t')
のようになるのでしょうか?

お礼日時:2019/12/12 11:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!