お世話になります。
区切り文字の調整方法について教えて下さい。
現在下記のようなスペースでカラム合わせされたデータが
''''''''''''''''''''''''''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ベストアンサー
- 回答日時:
以下のスクリプトを作成します。
(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()
前回に引き続き、ありがとうございます。
対象ファイルがある中に、sample.rbを配置した後に
ruby sample.rb C:\Users\user\Desktop\新しいフォルダー\test
のように実施してみたのですが、フォルダの中には何も入ってきませんでした。
よくよくファイルを確認していくと
data_*.txt
の列の数がファイルによっては4列だったり、5列目のデータがあったりと不定だったりするのがまずいのでしょうか?
No.3
- 回答日時:
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')
>のようになるのでしょうか?
原則、それであっています。但し、前後の区切り文字を削除してはくれませんの注意してください。
詳しい説明ありがとうございます。
nil構文はかなり便利なものですね。今度自作する時は使用させていただきます。
また、,の時など、空白以外の区切り文字の時は、あらかじめ区切り文字を空白に変えてからの方が良さそうですね。そうすればnil構文が使用できる。
ありがとうございます。
No.2
- 回答日時:
「data_1.txtから現在の所data_1051.txtまである」とかかれています。
画像をみるとdate_になっています。(data_ではなく)
date_が正しいなら、
files = Dir.glob("data_*.txt")を
files = Dir.glob("date_*.txt")に変えてください。
すみません。
観測機器の名称設定エラーでした。
ありがとうございます。
実施しなおしてみた結果、無事に変換してくれました。
それでデータベースにデータを載せることができます。
教えて下さい。
スペースがたくさんあるのを
最初は左詰めにしろ
次の列からは,のみに変換しろ
という命令は
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')
のようになるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Indirect関数について、Formulatextで抽出した数式を参照したい。 1 2022/12/15 11:16
- 工学 周波数fで表現したフーリエ変換の対称性に関する質問です。 1 2022/09/14 12:27
- 格安スマホ・SIMフリースマホ E-SIM電話番号不明表示 1 2023/07/23 19:48
- 数学 f(x)=e^|-ax+b| (a>0、bは定数)のフーリエ変換 ax+b≧0 の時、 ∫(0~∞) 3 2023/02/10 20:01
- 物理学 対消滅(その2)について,大学の物理者(教授,准教授)の方に,教えてgooです 3 2022/07/28 09:58
- 数学 【数学ⅲ微分】e^xの微分と、x^pの微分の違いがわかりません… 6 2022/07/07 21:31
- 数学 正体のわからない(^O^)2つの確率変数 X と Y の E[X]、E[Y]、E[XY] 2 2023/04/17 06:39
- 数学 数学の問題について 1 2023/02/13 18:40
- 数学 {√{{tan^{-1}{e^{2nπi}}}^{-1}}{∫(-∞,∞)e^{-x^{2}}dx} 1 2022/11/28 07:33
- 数学 局所コンパクト空間になることの必要十分条件についての質問 3 2022/03/24 16:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ruby】flockで掛けたロックを...
-
ギャスケット作成。修正の解説...
-
fortranでNAのあるデータを読み...
-
Fortran:列数の分からないデー...
-
VBAでcsvファイルもシートもあ...
-
EXCEL→CSV保存時のダブルクォー...
-
バッチ処理 特定の文字以降を...
-
ダブルコーテーション付きでCSV...
-
C# ファイルを読み込みlistvie...
-
【ExcelVBA】300万件越えCSVか...
-
VBA テキストボックスを選択状...
-
Excelマクロ 空白セルを無視し...
-
バッチ for /f 空白、スペース...
-
verilog HDLについての質問です...
-
VBA csvファイルのデータを...
-
VB.netでShellExecuteがしたい
-
複数のファイルをまたぐエクセ...
-
SQLでテキストボックスの文字を...
-
[コンパイルエラー 修飾子が不...
-
rubyを用いたCSVファイルの分割...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pythonのエラーについて
-
pycharmへのpysamインストール...
-
fortranでNAのあるデータを読み...
-
Fortran:列数の分からないデー...
-
【fortran77】空行を含む数値デ...
-
区切り文字の調整方法について...
-
【ruby】flockで掛けたロックを...
-
rubyの見えない文字
-
2次元Hashのkeyチェック方法
-
Ruby 暗号化したファイルの復号...
-
ギャスケット作成。修正の解説...
-
Excelマクロ 空白セルを無視し...
-
バッチ処理 特定の文字以降を...
-
【ExcelVBA】300万件越えCSVか...
-
ダブルコーテーション付きでCSV...
-
VBAでcsvファイルもシートもあ...
-
パイソンでテキストファイルが...
-
VBA テキストボックスを選択状...
-
CSVで余計な空行が入る
-
EXCEL→CSV保存時のダブルクォー...
おすすめ情報
No.1のご回答を頂いた tatsu99様
コマンドプロンプトを実施した時のスクリーンショットを添付します。