Rubyを使って、テキスト処理をやっています。
どうしても、うまく行かないところがあります。
サジェスチョンをお願いします。
正規表現にて、
2つの条件フラグが成立していて、かつ、特定の文字列を含まないという条件です。
1行の内容は、textに入っています。
if (myFlag1==1) && (myFlag2==1) && (!/abcdef/) then
xxxxxxxx
end
(!/abcdef/)は、perlでの表現です。Rubyでは、少なくとも
(!/abcdef/=~text)
かな、と考えましたが、ダメでした。
(/abcdef/!=text)
でも、だめでした。
宜しくお願いいたします。
No.2ベストアンサー
- 回答日時:
> if (myFlag1==1) && (myFlag2==1) && (!/abc def/) then
> (!/abc def/=~text)
> かな、と考えましたが、ダメでした。
> (/abc def/!=text)
> でも、だめでした。
> (/NONE/!=text)
!= じゃなくて !~ では?
それと
> パターンとして、NONEと言う文字列が入っている場合には、処理を飛ばしたいのです。
こういうときはいたずらに条件を複雑にするのではなくて、
while text = f.gets do
next if /NONE/ =~ text
if (/.../) then
end
end
のように分けた方がスッキリしてわかりやすくなると思います。
sakusaker7さん、ありがとうございます。
next if /NONE/ =~ text
これを使って、うまく行きました。
皆様のお陰で、今回、目標とした、PerlをRubyで置き換えるステップは、無事完了しました。ありがとうございました。
No.1
- 回答日時:
動作するソースを出して下さい。
以下の2つのプログラムは、正しい動作をしていると思いますが、
どうでしょうか?
「myFlag1」の1は全角のままにしておきました。
#!ruby -Ks で行けるはず。
D:>ruby t1.rb
OKだぁ
D:>ruby t2.rb
NGだぁ
t1.rb
------------------------
#!ruby -Ks
myFlag1 = 1
myFlag2 = 1
text = "abc def"
if (myFlag1 == 1) && (myFlag2 == 1) && (text =~ /abc def/) then
puts "OKだぁ"
else
puts "NGだぁ"
end
------------------------
t2.rb
------------------------
#!ruby -Ks
myFlag1 = 1
myFlag2 = 1
text = "abc def"
if (myFlag1 == 1) && (myFlag2 == 1) && (text !~ /abc def/) then
puts "OKだぁ"
else
puts "NGだぁ"
end
------------------------
この回答への補足
guci-okさん、ありがとうございます。
小生の現状を正確に記述します。
入力ファイル(名称:test.log)
aaaa bbbbb cccc dddd eeeee ffff ggggg
NONE
NONENONExxxx
期待する出力ファイル(名称:file_Status.txt)
aaaa bbbbb cccc dddd eeeee ffff ggggg
現状のRubyスクリプト
上記入力ファイルは、C:\Program Files\RDE\myData\xxx_2007\Dataに置いています
Dir.chdir('C:\Program Files\RDE\myData\xxx_2007\Data')
print Dir.getwd,"\n"
dir = Dir.open('C:\Program Files\RDE\myData\xxx_2007\Data')
file_status=open("file_Status.txt", "w+")
while myFilename=dir.read
if /.log/i =~myFilename
file_source_body=open(myFilename, "r")
while text=file_source_body.gets do
if (/^(\S+)\s*(\S+)\s*(\S+)\s*(\S+)\s*(\S+)\s*(\S+)\s*(\S+)\s*(\S+)\s*(\S+)/=~text) && (/NONE/!=text) then
file_status.print text,"\n"
end
end
file_source_body.close
end
end
file_status.close
dir.close
現状のスクリプトの出力
aaaa bbbbb cccc dddd eeeee ffff ggggg
NONENONExxxx
---------------------
2行目のNONEが出ていないのは、(/NONE/!=text)で抑えているから、当たり前ですが、
3行目の”NONENONExxxx”が出ているのは、困ります。
パターンとして、NONEと言う文字列が入っている場合には、処理を飛ばしたいのです。
-------------------
ここで、改めて、問題点は、
(1)その行のなかに、「あるパターンの文字列」が入っていない場合の表現の仕方。
(2)上記の正規表現で、(¥S+)の数が、実際の入力ファイルのデータの個数(7個)
aaaa bbbbb cccc dddd eeeee ffff ggggg
と合っていなくても、動くのは、なぜ?
(3)現状の出力ファイルにて、なぜ、2行目が空欄になるのか?
(/NONE/!=text)で、処理を飛ばしたのだから、空白になるのは、おかしい??
宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Perl Perlで特定文字列から特定文字列までを抜き出したい 4 2022/04/02 14:24
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- Visual Basic(VBA) 正規表現を用いての並び替え 7 2022/04/04 09:27
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Java JAVAの1つの正規表現で上記Textすべてと合致する正規表現を教えてください。 4 2022/11/06 08:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスかラベル上の...
-
sublimit textっていうエディタ...
-
ExcelのVBAで文章にある複数の...
-
【VBS】クリップボード操作につ...
-
WORd VBA 文章を単語に分解する
-
枕草子の「中納言参り給ひて」の...
-
文字列を日付型情報として計算...
-
Can you text me your business...
-
Googleシート「A1」でなくて「A...
-
アクセスのフィールドに値をペ...
-
DTPicker テキストクリアの方法
-
VBA public変数はどのようなこ...
-
String型の値にスラッシュをつ...
-
C言語のサフィックスについて
-
VB.NETでのイベントの途中終了
-
レコードセットにnullの場合
-
C#のループでtextboxに値を入れ...
-
エクセルVBAでテキストボッ...
-
チェックボックスを操作できな...
-
Excel ユーザーフォームで計算 ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sublimit textっていうエディタ...
-
ExcelのVBAで文章にある複数の...
-
テキストボックスかラベル上の...
-
【VBS】クリップボード操作につ...
-
RichTextBoxで指定行の色を自動...
-
vba 日本語以外を抽出について
-
文字列を配列に…。
-
Pythonのre.split()の正規表現...
-
VBスクリプトでファイルのコピ...
-
VB6.0 sp5]テキストボックスと...
-
文字列を日付型情報として計算...
-
XMLファイルのattribute値がう...
-
VBScript、ClipboardDataオブジ...
-
[VB6] SQLの作成について
-
Visual Basicについてお聞きし...
-
表の文字の均等割りについて
-
perlによるxmlファイルの取得
-
Googleシート「A1」でなくて「A...
-
HTMLのデータ読み取り
-
サンプルプログラムをコンパイ...
おすすめ情報