ツリー一括表示

Nomal テキストの範囲指定の置換方法 /しのぴ〜 (13/06/20(Thu) 09:47) [#6301]
Nomal その3 /かんたろう (13/06/21(Fri) 14:58) [#6307]
│└Nomal Re[2]: その3 /しのぴ〜 (13/06/25(Tue) 17:29) [#6308]
│  └Nomal 良かったですね。 /choco (13/06/26(Wed) 14:59) [#6311]
│    └Nomal Re[4]: 良かったですね。 /しのぴ〜 (13/06/27(Thu) 10:33) [#6312] 解決済み!
Nomal その2 /うぇいく (13/06/21(Fri) 09:53) [#6305]
Nomal 方法その1 /choco (13/06/20(Thu) 13:31) [#6304]
Nomal 色々ありそうですね /choco (13/06/20(Thu) 10:21) [#6302]
  └Nomal Re[2]: 色々ありそうですね /しのぴ〜 (13/06/20(Thu) 11:49) [#6303]


親記事 / ▼[ 6307 ] ▼[ 6305 ] ▼[ 6304 ] ▼[ 6302 ]
/ 親階層)  テキストの範囲指定の置換方法
□投稿者/ しのぴ〜 【61.204.28.34】(2013/06/20(Thu) 09:47:13)


    処理前のファイル
    1234567890123456789012345678901234
    syurui nedan omosa santi
    ----------------------------------
    DAIKON , 300, 1.234,HOKKAIDO
    NINJIN , 150, 0.456,HOKKAIDO
    JYAGAIMO , 50, 0.078,HOKKAIDO


    処理後のファイル
    1234567890123456789012345678901234
    syurui nedan omosa santi
    ----------------------------------
    DAIKON , 300, 0.000,HOKKAIDO
    NINJIN , 150, 0.000,HOKKAIDO
    JYAGAIMO , 50, 0.000,HOKKAIDO


    このようなテキストファイルを読み込んで、
    「omosa」の数値を全て0.000に置換したいです。

    いろんな数値があるので単純に文字列置換できず困っています。
    行列を指定して0.000に文字置換するにはどうすれば良いでしょうか?

    例えば、3行目から18文字目〜25文字目を" 0.000"に変換するというような
    命令はあるでしょうか。

    テキストファイルを読み込んで単純な文字列置換の処理は理解しています。
    よろしくお願いします。
[ □ Tree ] 返信 削除キー/
[ □ Tree ] 返信

▲[ 6301 ] / ▼[ 6308 ]
/ 1階層)  その3
□投稿者/ かんたろう 【59.87.203.22】(2013/06/21(Fri) 14:58:25)

    > 「omosa」の数値を全て0.000に置換したいです。
    >
    との事なので正規表現を使うのがいいのでは

    #ここから
    テキスト=「DAIKON , 300, 1.234,HOKKAIDO
    NINJIN , 150, 0.456,HOKKAIDO
    JYAGAIMO , 50, 0.078,HOKKAIDO」

    テキストの「(.*),(.*),.*,(.*)」を「$1,$2, 0.000,$3」に正規表現置換
    それをメモ記入
    終わる

[ 親 6301 / □ Tree ] 返信 削除キー/
[ 親 6301 / □ Tree ] 返信

▲[ 6307 ] / ▼[ 6311 ]
/ 2階層)  Re[2]: その3
□投稿者/ しのぴ〜 【61.204.28.34】(2013/06/25(Tue) 17:29:21)

    choco様、うぇいく様、かんたろう様
    回答頂きありがとうございます。

    実は質問投稿の後、急な出張でその後試すことが出来ませんでした。
    お礼のお返事が大変遅れてしまい申し訳ございませんでした。

    ご報告させていただきます。

    まずは、かんたろう様の回答を参考にさせて頂きました。
    とてもシンプルでやりたいことが綺麗にできました。

    -----------------------------------------------------------------
    「D:\なでしこ\test1」の全ファイル列挙。
    それを反復
    対象を読む。

      それの「(.*),(.*),.*,(.*)」を「$1,$2, 0.000,$3」に正規表現置換

      それを対象へ保存。
    「終わりました!」と言う。終わる。
    -----------------------------------------------------------------

    そこで追加の質問で申し訳ないのですが、

    対象を読む。 の開始をテキストファイルの4段目から始めるにはどうしたら良いでしょう?
    実はテキストファイルの1〜3段目までがヘッダになっており(カンマが入っています)、
    置換の対象から外したいのです。

    他の方の回答も試させて頂きます。
    本当にありがとうございました。

    よろしければ、引き続きよろしくお願い致します。


[ 親 6301 / □ Tree ] 返信 削除キー/
[ 親 6301 / □ Tree ] 返信

▲[ 6308 ] / ▼[ 6312 ]
/ 3階層)  良かったですね。
□投稿者/ choco 【202.171.147.114】(2013/06/26(Wed) 14:59:29)

    かんたろうさんの仕組みが一番シンプルでいいですね。

    > 対象を読む。 の開始をテキストファイルの4段目から始めるにはどうしたら良いでしょう?
    > 実はテキストファイルの1〜3段目までがヘッダになっており(カンマが入っています)、
    > 置換の対象から外したいのです。
    で、この質問が来るって事はちょっと回答が早かったのかな?
    2回目の質問は、もうちょっと手前で学習するような内容なので。
    そんなに難しくないので、かんたろうさんの仕組みをベースに考えて見て下さい。
    人に教えてもらうのが一番簡単なのですが、それだとなかなか覚えないのですよ^^;

    苦しんでもダメだったら、また質問してくださいな。

[ 親 6301 / □ Tree ] 返信 削除キー/
[ 親 6301 / □ Tree ] 返信

▲[ 6311 ] / 返信無し
/ 4階層)  Re[4]: 良かったですね。
□投稿者/ しのぴ〜 【61.204.28.34】(2013/06/27(Thu) 10:33:55)

    choco様

    お返事ありがとうございます。

    かんたろう様のご回答の方法だと項目数(カンマで区切った横並びの数)が、
    例の4項目くらいだと問題はなく処理されるのですが、
    30項目くらいに増えるとフリーズしたようになってしまいます。
    20項目くらいが限界なのかな。

    皆さんから頂いたご回答がとても参考になっています。
    他の方の方法も試してみたいと思います。

    また質問させて頂くかも知れませんが一旦クローズさせて頂きます。
    ありがとうございました。


解決済み!
[ 親 6301 / □ Tree ] 返信 削除キー/
[ 親 6301 / □ Tree ] 返信

▲[ 6301 ] / 返信無し
/ 1階層)  その2
□投稿者/ うぇいく 【210.160.252.168】(2013/06/21(Fri) 09:53:17)

    質問にある、「18文字目から25文字目のあたり」というのを利用すると、以下のような感じでしょうか。
    これは、全行を処理する場合は以下のような感じに。
    --------------
    '変数宣言
    motoとは配列
    sakiとは配列
    行とは文字列

    'テスト用データの準備
    moto=「DAIKON , 300, 1.234,HOKKAIDO
    NINJIN , 150, 0.456,HOKKAIDO
    JYAGAIMO , 50, 0.078,HOKKAIDO」
    '処理
    motoを「{\13}{\10}」で区切って反復する
     行はそれ
     sakiに(行の18文字左部分) & " 0.000" & (行の(行の文字数-25)文字右部分)を配列追加する
    '結果確認
    sakiを言う。
    '終了
    終わる。
    -------------

    特定の行だけ処理する場合は、処理の部分を以下に差し替える感じに。
    この例では3行目を書き換えています(ソース上の2か所の「saki[2]」が3行目を指している。)
    -------------
    '処理
    sakiはmotoを「{\13}{\10}」で区切る
    行はsaki[2]
    行は(行の18文字左部分) & " 0.000" & (行の(行の文字数-25)文字右部分)
    saki[2]は行
    -------------

    開始文字と終了文字で囲まれた範囲を置換する命令(範囲置換、範囲内置換)はあるんですが、桁指定で指定した範囲を置換する命令はないんですね・・・・
    (VisualBasicでいうところの、MID()の代入での利用みたいな)

    ※データ中に日本語を含む場合は、文字数、文字左部分、文字右部分の替りに、バイト数、バイト左部分、バイト右部分を使う必要があるかもしれないので注意。
[ 親 6301 / □ Tree ] 返信 削除キー/
[ 親 6301 / □ Tree ] 返信

▲[ 6301 ] / 返信無し
/ 1階層)  方法その1
□投稿者/ choco 【202.171.147.114】(2013/06/20(Thu) 13:31:35)

    ちょっと仕事してるので・・・
    仕事しろよ!って言う、ツッコミは無しでw

    ---------------------
    motoとは配列

    moto=「DAIKON , 300, 1.234,HOKKAIDO
    NINJIN , 150, 0.456,HOKKAIDO
    JYAGAIMO , 50, 0.078,HOKKAIDO」
    motoをCSV取得
    それの2を表列削除
    それの2に「0.000
    0.000
    0.000」を表列挿入
    それを言う。
    終わる。
    ---------------------

    一旦外出しますので、よるにまた来ます。
    他の人がその2以降を書いてくれてると嬉しいです。
    (その3までは、行けるはず。)


    *(2013/06/20(Thu) 13:33:30 編集[投稿者])
[ 親 6301 / □ Tree ] 返信 削除キー/
[ 親 6301 / □ Tree ] 返信

▲[ 6301 ] / ▼[ 6303 ]
/ 1階層)  色々ありそうですね
□投稿者/ choco 【202.171.147.114】(2013/06/20(Thu) 10:21:38)

    はじめまして、しのぴ〜さん

    テキスト操作の基本問題みたいで楽しそうです。
    前提条件として、ちょっと聞きたいのですがこのデータはCSV形式として扱えるのでしょうか?
    カンマが入っているので見た目はそうなんですが、しのぴ〜さんのデータ提示が固定長みたいな感じだったので。
    あと、このデータの「omosa」は、全て3列目にあるのでしょうか?

    > 「omosa」の数値を全て0.000に置換したいです。
    全ての行の列が同数ならば、どの方法を提示したほうがいいのかなと。
    まずは前提条件だけ教えてくれますか?

    以上、宜しくお願いします。
[ 親 6301 / □ Tree ] 返信 削除キー/
[ 親 6301 / □ Tree ] 返信

▲[ 6302 ] / 返信無し
/ 2階層)  Re[2]: 色々ありそうですね
□投稿者/ しのぴ〜 【61.204.28.34】(2013/06/20(Thu) 11:49:54)

    No6302に返信(chocoさんの記事)
    > はじめまして、しのぴ〜さん

    初めましてchocoさん。
    返信ありがとうございます。
    これまで、なでしこは簡単なファイル操作などでお世話になっております。


    > テキスト操作の基本問題みたいで楽しそうです。
    > 前提条件として、ちょっと聞きたいのですがこのデータはCSV形式として扱えるのでしょうか?
    > カンマが入っているので見た目はそうなんですが、しのぴ〜さんのデータ提示が固定長みたいな感じだったので。

    実際のテキストは項目ごとにカンマで区切られていますが、
    スペースの数とかは崩さずに元の形のまま処理したいです。


    > あと、このデータの「omosa」は、全て3列目にあるのでしょうか?

    そうです。イレギュラな並びはなく、常に同じ位置に配列されています。


    >>「omosa」の数値を全て0.000に置換したいです。
    > 全ての行の列が同数ならば、どの方法を提示したほうがいいのかなと。
    > まずは前提条件だけ教えてくれますか?
    >
    > 以上、宜しくお願いします。

    こちらこそよろしくお願いします。

    説明不足で申し訳ございません。
    説明を補足させて頂きました。
    他に疑問点などあればお答えします。
    処理自体は極々シンプルな方法が良いですね。




[ 親 6301 / □ Tree ] 返信 削除キー/
[ 親 6301 / □ Tree ] 返信


Pass/

BBS CGI RSS CGI
Child Tree RSS/SPAM対応版