• 締切済み

csvデータの置換について

お世話になります。 batファイルを利用してcsvファイルの数値の置換をしたのですが、ご教授下さい。 詳細は下記になります。 【環境】 Windows2008 Server 【対象ファイル】 test.csv 【実施内容】 ファイルの内容は下記になります。 A,111,aaa B,222,bbb C,333,ccc D,444,ddd E,555,eee 上記の内容で数値を下記のように置換したい。 111は111F 222は222G 333は333H 444は444I 555は555J よろしくお願い致します。

みんなの回答

回答No.5

ジミー 「助けてくれよマイケル~」 マイケル「おやおやどうしたんだいジミー? 地味な顔がますます地味になってるぜ?」 ジミー「バッチを使ってcsvを置換したいんだ~」 マイケル「それは大変DA★ そんな時はこのバッチを使うんだ!」 ――――――――――――――ここから――――――――――――――― @echo off setlocal enabledelayedexpansion rem 取得ファイルと出力ファイル名のフルパス set inFile=%~dp0test.csv set outFile=%~dp0test_out.csv rem 出力ファイルの初期化 type nul>"%outFile%" rem 置換一覧取得(このバッチの「rem 一覧,」以降をリストとして使用 set listReadFlag=False set /a cnt=0 for /f "usebackq tokens=1,2* delims=," %%f in ("%~dpnx0") do ( set line=%%f if "!listReadFlag!"=="True" ( set /a cnt+=1 set b[!cnt!]=%%f set a[!cnt!]=%%g ) if "rem 一覧"=="!line!" (set listReadFlag=True) ) set line= rem csvを一行ずつ取り出して置換 for /f "usebackq delims=" %%h in ("%inFile%") do ( set line=%%h rem 置換メソッドで置換して出力 call :Sub echo !line!>>"%outFile%" echo ----- ) pause exit :Sub echo :!line! for /l %%i in (1,1,%cnt%) do ( rem b(before)をa(after)に置換 call echo %%line:!b[%%i]!=!a[%%i]!%% call set line=%%line:!b[%%i]!=!a[%%i]!%% ) echo :!line! exit /b rem バッチ処理時に使う半角記号は使えないので注意 rem 上記やその他で何かあればyaihakiseruまで相談を♪ rem 一覧, 111,111F 222,222G 333,333H 444,444I 555,555J ――――――――――――――ここまで――――――――――――――― ジミー 「Oh! なんだいこのエクセレントなバッチは!」 マイケル「test.csvと同じ場所にバッチを置いてダブルクリックすれば、あら不思議!」 マイケル「bat内に保存されたリストに従ってcsvの内容を置換してくれるスグレモノだ!」 ジミー 「Oh! そいつは便利だぜ!」 マイケル「さらに今後置換対象が増えても大丈夫!」 マイケル「バッチの最後尾に「置換前,置換後」と追加するだけで置換してくれるぜ! ジミー 「Oh! そいつはクールだぜ!」 マイケル「もし分からないことがあったら返信してくれよな!!」 なんだこれ……以上

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

>batファイルを利用して どういう言語やスクリプトを使うことを望んでいるのですか。 UNIX系のソフトやコマンドなどを使うのですか。 バッチファイルを操れるレベルなら、テキストエディタの置換などのできるものを探したり、正規表現などを使えるのでは。 ーー わたしはそちらは判らないので,WIN系のメモ帳のテキストファイルを対象に、VBAやVBSCRIPTでやってみた。 例データ aaa,111,2 bbb,222,123 ccc,333,rtw aaa,444,345 drt,666,tyu ーー 標準モジュールに Sub test02() Open "C:\Users\xxx\Desktop\テストデータ3.txt" For Input As #1 'CSVの場合は要修正 Open "C:\Users\xxx\Desktop\テストデータ4.txt" For Output As #2 '-- While Not EOF(1) Line Input #1, x b = Split(x, ",") MsgBox Right(b(1), 1) Z = Chr(Asc(Right(b(1), 1)) + 48) ’1とaには文字コードで48の差があるので  ’1とAには文字コードで16の差 この大文字にする場合は+16にする b(1) = b(1) & Z MsgBox b(0) s = "" For i = 0 To UBound(b) s = s & b(i) & "," Next i MsgBox Left(s, Len(s) - 1) Print #2, Left(s, Len(s) - 1) Wend '-- Close #1 Close #2 End Sub  Msgbox はテスト以外ではコメント化すること。 結果 aaa,111a,2 bbb,222b,123 ccc,333c,rtw aaa,444d,345 drt,666f,tyu

noname#223623
noname#223623
回答No.3

置換ルールがわかりにくいです。以下、疑問点を挙げますのでご説明ください。 (疑問) 111 は常に 111F に置換されるのか? どんな場合でも 111 は 111F に置換するのか。その場合、111 が 1 件目になくても 111F になるし、複数回出現してもすべて 111F に置換される。それでいいのか。 とりあえずこれだけご説明願います。内容によってはさらにお聞きするかもしれません。 なお、常に 111 が 111F になるのであれば、#2 さんの回答で十分だと思います。

  • shintaro-2
  • ベストアンサー率36% (2266/6244)
回答No.2

batファイルではなく エクセルやメモ帳でやった方が簡単だと思いますが?

参考URL:
http://okwave.jp/qa/q4372316.html
  • mpascal
  • ベストアンサー率21% (1136/5195)
回答No.1

私は、簡単なテキストデータ処理には、awk (gawk) をつかいます。 https://hydrocul.github.io/wiki/commands/awk.html gawk http://www.vector.co.jp/soft/dos/util/se020845.html

関連するQ&A

  • CSVに外部テキストファイルを列として追加する方法

    こんにちは。 CSVファイル(base.csv)の先頭列に、別のテキストファイル(add.txt)の中身を新規の列として挿入したいと考えているのですが、よい方法がわかりません。。。 どうのような方法を使えば対応することができるでしょうか? どうぞよろしくお願いいたします。 ■CSVファイル(master.csv) title,developer_name,seller_name,primary_genre_name,application_url AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE ■テキストファイル(add.txt) id 000 111 222 333 ↓ ■目標としたファイル(master.csv) id,title,developer_name,seller_name,primary_genre_name,application_url 000,AAA,BBB,CCC,DDD,EEE 111,AAA,BBB,CCC,DDD,EEE 222,AAA,BBB,CCC,DDD,EEE 333,AAA,BBB,CCC,DDD,EEE

  • CSVファイルをAccessに取りこみたい

    以下のような2つのCSVファイルがあるとします。 【hoge1.csv】 aaa,bbb,ccc,ddd 1,2,3,4 【hoge2.csv】 aaa,bbb,ddd,eee,fff 1,2,4,5,6 Accessをあまり使用したことがないので教えていただきたいのですが、 hoge1.csv、hoge2.csvを、以下のような形で Accessの1つのテーブルにインポートする事はできるのでしょうか? ---------------------------- | aaa | bbb | ccc | ddd | eee | fff | | 1 | 2 | 3 | 4 |  |  | | 1 | 2 |  | 4 | 5 | 6 | ---------------------------- ※「aaa」「bbb」…をフィールド名としたいです vb等でプログラムを自作するしかないのでしょうか? 何か良い方法がありましたら教えてください。お願いします。

  • CSVデータをツリー表示させたい

    業務で、WEBサイトにCSVデータを表示させたいと考えています。 CSVデータは、毎日更新されるもので、行数も日々変更されます。 項目の中に「レベル」という項目があり、この「レベル」の値を使って、 ツリー表示出来ないかと考えています。 希望としては、決められたフォルダに決められたファイル名で、 CSVデータを置けば、自動的にWEB上にツリー表示されるという ことです。 J-query等で、これを実現出来るプラグインが無いか探しているのですが、 なかなか希望に合うものが見つからず、困っています。 (CSVをWEB表示するものは見つかるのですが、ツリー表示出来る ものが見つかりません) 何か、良い方法があれば、ご教示頂けませんでしょうか? 例 コード  レベル 品名  規格 ・・・・    コード     レベル 品名  規格 ・・・・  1234    1   AAA   aaa       -1234       1    AAA   aaa 2345    2   BBB   bbb        ∟2345     2    BBB  bbb 3456    3   CCC   ccc          ∟3456   3    CCC  ccc 4567    3   DDD   ddd          ∟4567   3    DDD  ddd 5678    3   EEE   eee           ∟5678   3    EEE  eee 6789    4   FFF   fff             ∟6789  4    FFF   fff 7890    3   GGG  ggg           ∟7890   3    GGG  ggg

  • 大量のCSVデータを1つのエクセルデータにまとめる方法について

    今仕事で、CSVファイルが400ファイル程あり、これを一つの エクセルファイルにまとめなくて加工しなければならないのですが うまいことVBAを活用して効率的にできないか思案中なのですが うまい具合に行きません。 データの持ち方として ○CSVファイル1 1.AAA 2.BBB ○CSVファイル2 3.CCC 4.DDD となっており、これを1つのエクセルファイル上で 1.AAA 2.BBB 3.CCC 4.DDD としたいのですがなにかいい方法はないでしょうか? 1つのブックで外部データの取り込みでCSVを次々に選択して いくVBAなんてあれば教えていただけないでしょうか? よろしくお願いします。

  • SpreadのデータをCSVに出力する際。。。

    いつもお世話になっております。 現在SpreadのデータをCSVに出力するプログラムを作成しています。 例えば、Spreadのデータに… ------------------- AAA BBB CCC DDD BBB DDD ------------------- というデータが入っている場合、 CSVには… ------------------- AAA BBB CCC DDD ------------------- という風に出力したい(重複した場合は一方だけ出力)のですが、 なかなかうまくいきません(汗) どのようなプログラムを組めばうまくいくか、 ご教授して頂ければ幸いです。 宜しくお願いします。 ※そのままCSVに出力するやり方はわかります。

  • 文章中のファイルリンクを置換したい

    文章をjavascriptで読み込み、 以下のような文章のなかに埋まっているファイルリンクの文字を 置換してあげたいのですが、正規表現で表現しきれないでしょうか? ■例: ---以下文章---- あああああ いいいいい \\AAA\BBB\CCC ううううううう \\CCC\DDD\EEE えええええ --------------- とあった時に、下記のようにしたいと考えています。 --------------- あああああ いいいいい <a href="file:////AAA/BBB/CCC">\\AAA\BBB\CCC</a> ううううううう <a href="file:////DDD/EEE/FFF">\\DDD\EEE\FFF</a> えええええ --------------- 今考えている限りだとは\\までを含む文章まではマッチさせて、 リプレースできるのですが、 文章の中の\を/に置き換える方法が思いつきません。 ■私の頭の限界の正規表現だけだと下記までしか思いつきませんでした。 str.replace ( /(\\\\[^ \s\:\*\?\"\<\>\|\#\{\}\%\&\~]+)/gi , <a href=\"file:\/\/$&\">$&<\/a>)> どなたか思いつくことありましたらお知恵をかしていただけないでしょうか。

  • C言語による「テキストファイルの読み書き(fprintf)」について

    C言語による「テキストファイルの読み書き(fprintf)」について質問です ずぶの初心者ですが、既知のファイルの1行目に指定した文字列を付加させるプログラムを作りたいと思っています。 以下のように作りました。 ------------------------------------------------------------ #include <stdio.h> int main(void) { FILE *fp; fp = fopen("test.csv","r+"); fprintf(fp,"コントロールカラム1,コントロールカラム2,・・・(略)・・・,コントロールカラム56\n"); fclose(fp); return 0; } ------------------------------------------------------------ このとき「test.csv」の内容が以下のようであったとします。(容量は1MBくらいです。) 001,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj 002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj ~(略) 5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj この状態でプログラムをコンパイルして実行すると、「test.csv」の内容が以下のようになってしまいます。(一行目が消える) AAA,BBB,CCC,DDD,EEE 002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj ~(略) 5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj またcsvの行が増える度に妙な挙動になっていきます・・・(一行あいたり、先頭行が5行ほど消えたり) 希望する動作としては コントロールカラム1,コントロールカラム2,・・・(略)・・・,コントロールカラム56 001,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj 002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj ~(略) 5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj のようになるようにしたいのですがどのようにすればよいのでしょうか。 よろしくお願いします。 (使用ソフト:Borland C++ Compiler, Cpad) 参考にしたサイトの項目:http://homepage3.nifty.com/mmgames/c_guide/17-01.html

  • accessvbaで内容を結合して保存

    accessvba初心者です。質問なのですが下記のようなxmlファイルがあるとします。 <?xml version="1.0" encoding="shift_jis"?> <データ> <aaa> <bbb>1</bbb> <ccc>2</ccc> <ddd>3</ddd> <eee>4</eee> <fff>5</fff> </aaa> </データ> これをvbaにて<bbb><ccc><ddd><eee>の内容を取り出し結合して出来た1234をAテーブルのBフィールドにレコード保存したいのですが出来ますでしょうか? テーブルを開いてフィールドに保存する部分はなんとか理解出来たのですが要素を取り出して結合する部分がわかりません。 access2003を使用しています。よろしくお願いします。

  • 【Microsoft Excel】 .csv 以外のCSVファイルをExcelで開きたい!

    .csv 以外のCSVファイルをExcelで開きたいのですがどうしたらよいでしょうか? abcd.csvというExcelで問題なく開けるCSVファイルがあるとします。 これの拡張子を.xxx(又はその他、独自設定の拡張子)に変更して、Excelで開けるようにしようと思ったのです。 フォルダオプション>ファイルタイプ>新規(ボタン)」で「新しい拡張子の作成」ダイアログが開き、そこで ・ファイルの拡張子=.xxx ・関連付けられているファイル タイプ=Microsoft Excel CSV ファイル と設定して、abcd.xxxをダブルクリックでExcelが起動&ファイルオープンするまではいったのです。(アイコンも.csvファイルといっしょになりました。) しかし、 aaa,bbb ccc,ddd という内容のファイルが セルA1=aaa,bbb セルA2=ccc,ddd となり、csvファイルとして認識してくれていないみたいなのです。 ちなみに、元の.csvの場合にはちゃんと セルA1=aaa セルB1=bbb セルA2=ccc セルB2=ddd とExcelは表示してくれます。 どうにか上手い方法は無いものでしょうか! よろしくお願いいたします。

  • エクセルで列にあるユニークなデータの個数が知りたい

    おはようございます。 エクセルでA列に以下のようなデータがあるとします。 この中で何種類のデータがあるのかを知りたいのです。 この場合は、AAA,BBB,CCC,DDD,EEEの5種類なので5という答えが欲しいのです。 ただし、A列に入るデータは非常に多岐(800種類以上)に渡ります。 また、印刷を前提としてるためソートなどはできません。 さらに1枚のシートにこのようなデータがいくつかあるので、その決まった範囲内で個数を抽出する必要があります。 なにとぞ皆様のお知恵をお貸しくださいませ。 よろしくお願いします。 AAA AAA BBB CCC AAA DDD DDD BBB DDD DDD EEE EEE

専門家に質問してみよう