1レコードを2レコードに分けて出力する方法

このQ&Aのポイント
  • この記事では、Javaを使用して1つのレコードを2つのレコードに分割して出力する方法について説明します。
  • 具体的には、テキストファイルからデータを読み取り、連続した番号を付けて2つのレコードに分割して出力するプログラムを作成します。
  • そして、出力されたデータを表と裏に分けて表示する方法も紹介します。
回答を見る
  • ベストアンサー

1レコードを2レコードに分けて出力したい

このソースでテキスト入出力しますと 連続番号を付加して入出力できます。 さらに 下記のようにしたいのです。 例    1レコード目 1,テレビ,カメラ,クーラー,扇風機,パソコン 2レコード目 2,時計,マッサーサージ機,HDD,USB,扇風機 入出力後に(先頭に表・裏の"文字"を付加) 1レコード目   表, 1, テレビ, カメラ, クーラー 2レコード目   裏, 扇風機, パソコン 3レコード目   表, 2, 時計, マッサーサージ機, HDD 4レコード目   裏, USB, 扇風機 としたいのです。 1レコード分のデータを表と裏に分けて2レコードずつ出力するのが 目的になります。(先頭に表・裏の文字を付加) ですので1000レコードでしたらテキスト入出力後2000レコードになります。 下記のような連続番号を付加して入出力する場合 どの箇所を見直す必要があるのでしょうか?? どうぞよろしくお願いします。 package hoge.hoge.com; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class HelloWorld { private static String inFileName = "c:\\in.txt"; private static String outFileName = "c:\\out.txt"; /* Shift_JIS, ISP-2022-JP, EUC-JP Windows-31J */ /* 出力時に JISAutoDetect の指定は不可 */ private static String outFileCoding = "Shift_JIS"; public static void main(String[] args) { try{ String line; int i = 0; BufferedReader buf = new BufferedReader( new InputStreamReader( new FileInputStream( inFileName ), "JISAutoDetect" ) ); /* ファイルが存在しない場合には新たに作成.存在する場合には上書き */ BufferedWriter outFile = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( outFileName ), outFileCoding ) ); while( (line=buf.readLine()) != null ) { StringBuffer out = new StringBuffer(); i++; out.append(Integer.toString(i)); out.append(":"); out.append(line); outFile.write(out.toString()); outFile.newLine(); System.out.println(out); } buf.close(); outFile.flush(); outFile.close(); } catch(IOException e) { e.printStackTrace(); System.exit(1); } } }

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

(1)line=buf.readLine()で読み込んだlineの内容を2つに分ける (2)3行続いているout.append(line);の部分を変更して、下記の内容をoutにappend()する ・"表,"+連番+","+分割したlineの前半部分 ・改行 ・"裏,"+分割したlineの後半部分

ITJack
質問者

お礼

while( (line1=buf.readLine()) != null ) { String[] 配列 = line1.split(","); StringBuffer out = new StringBuffer(); //表レコード out.append("表"+","+連続番号+","+配列[0]+","+配列[1]+","+配列[2]); //レコード改行 out.append('\n'); //裏レコード out.append("裏"+","+連続番号+","+配列[3]+","+配列[4]); とこんな感じで対応出来ました。 考える個所が絞ることが出来たので 掲示板に記載してよかったです。 どうもありがとうございました。

ITJack
質問者

補足

裏レコードの連続番号は間違いです。

関連するQ&A

  • Java・ファイルへの書き込み

    はじめまして。 下記のプログラムで、以下の3つがどのような関係なのかがわかりません。 ("test1.txt")とnew FileWriterの関係 (new FileWriter("test1.txt")とnew BufferedWriterの関係 (new BufferedWriter(new FileWriter("test1.txt")と new PrintWriterの関係 どうかご教示いただきたく、よろしくお願い致します。 import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class Sample7 { public static void main(String[] args){ PrintWriter pw = null; try{ pw = new PrintWriter (new BufferedWriter(new FileWriter("test1.txt"))); pw.println("Hello!"); pw.println("GoodBye"); System.out.println("ファイルに書き込みました。"); }catch(IOException e){ System.out.println("入出力エラーです。"); }finally{ if(pw != null){ pw.close(); } } } }

    • ベストアンサー
    • Java
  • Javaのシリアライズについて質問です。

    Javaのシリアライズについて質問です。 以下の二つのコードで実行すると、ちゃんとシリアライズされたデータが生成されるのですが このコードでは実行するたびにデータが上書きされてしまいます。 これを実行するたびに新しいデータを最後尾に追加するような形にしたいのですがどのようにすればいいのでしょうか? よろしくお願いします。 ------------------------------------------------------------------------------- import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.io.FileInputStream; import java.io.ObjectInputStream; public class Main { public static void main(String[] args) { Data data = new Data(); data.setName("testtesttest"); try { FileOutputStream outFile = new FileOutputStream("data.txt"); ObjectOutputStream out = new ObjectOutputStream(outFile); out.writeObject(data); out.close(); outFile.close(); } catch(Exception ex) { ex.printStackTrace(); } } } ----------------------------------------------------------------------------------- import java.io.Serializable; public class Data implements Serializable { private String name = ""; public void setName( String NameData ) { name = NameData; } } -----------------------------------------------------------------------------------

    • ベストアンサー
    • Java
  • Javaのカウント方法について

    お伺い致します。 CSVで取り込んだデータの抽出をしたいのですが、方法が見出せません。どの点を直せば宜しいのでしょうか。 具体的には取り込んだ郵便番号をカウントして(例:京都市,34)CSVファイルに出力するように出したいのですがカウントがうまくできません。(以下、コメントアウトしたものがありますが、今までのソースを記載します) 宜しく御願いします。 import java.io.FileReader; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.*; public class test01 { static String fname ="26KYOUTO.CSV"; public static void main(String[] args){ if(args.length>0) fname = args[0]; try { BufferedReader reader = new BufferedReader(new FileReader(fname)); BufferedWriter pw = new BufferedWriter(new PrintWriter("orig.txt")); String line = reader.readLine(); System.out.println(line); pw.println(""); int n = 0; int count = 0; _/* while(true) { String line = reader.readLine(); if(line.equals("26101")) break; count++; } */ reader.close(); System.out.println("京都府北区=" +count ); } catch(FileNotFoundException e) { System.out.println("ファイルがありません。"); } catch(IOException e) { System.out.println("入出力エラーです。"); } } }

    • ベストアンサー
    • Java
  • 続続 1レコードを2レコードに分けて出力

    QNo.7590029で解決した件で //レコード改行 out.append('\n'); で表裏のデータがテキスト入出力出来たのですが メモ帳等エディタで開くと改行されてないことが 判明しました。 イメージですが表裏のレコードが 1レコードのままになっており、 表, 1, テレビ, カメラ, クーラー,裏, 扇風機, パソコンと入出力後も改行されてません。 テキストエディタ上では表裏の改行がされていたので 問題ないと思ったのですが 印刷指示がかからなく困っております。 アドバイスお願いします。

    • ベストアンサー
    • Java
  • レコード長からのbyteスキップ設定について

    QNo.8229324から あらたに新規でご質問させて頂きます。 1レコードごとに10byteあったとします。 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 レコード長からスキップ設定を35byteと設定したとします。 40byteごとに頭の付与された5byteをスキップさせたいのですが なにかサンプル及びアドバイス頂けますでしょうか? 仕様案 (1)まずはレコード先端の5byteをスキップ (2)次は35byteを超えた時点で5byteスキップを繰り返し。 どうぞ宜しくお願い致します。 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.ByteBuffer; import java.io.ByteArrayOutputStream; public class dat{ public static void main(String[] args) { String inputFileName = ""; String outputFileName = ""; // ファイルオブジェクトの生成 File inputFile = new File(inputFileName); File outputFile = new File(outputFileName); try { FileInputStream fis = new FileInputStream(inputFile); BufferedInputStream bis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream(outputFile); BufferedOutputStream bos = new BufferedOutputStream(fos); byte[] buf = new byte[17]; int len = 0; while ((len = bis.read(buf, 0, 17)) == 17) { bos.write(buf, 0, 17); } bos.flush(); bos.close(); bis.close(); } catch(Exception e) { e.printStackTrace(); } }

    • ベストアンサー
    • Java
  • 固定長データのbyteスキップについて

    バイナリ入出力でご質問がございます。 下記の例のように各レコードにある 先頭5byte付与されたデータを スキップ(破棄)して 各レコード10byteずつ読み込みたいのですが なにかサンプルデータもしくは アドバイス頂けないでしょうか? どうぞよろしくお願い致します。 例 1レコード 10byte (先頭5byte付与) LLLLL1234567890 LLLLL1234567890 LLLLL1234567890 LLLLL1234567890 LLLLL1234567890 ↓ 1234567890 1234567890 1234567890 1234567890 1234567890 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.ByteBuffer; import java.io.ByteArrayOutputStream; public class dat{ public static void main(String[] args) { String inputFileName = ""; String outputFileName = ""; // ファイルオブジェクトの生成 File inputFile = new File(inputFileName); File outputFile = new File(outputFileName); try { FileInputStream fis = new FileInputStream(inputFile); BufferedInputStream bis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream(outputFile); BufferedOutputStream bos = new BufferedOutputStream(fos); byte[] buf = new byte[17]; int len = 0; while ((len = bis.read(buf, 0, 17)) == 17) { bos.write(buf, 0, 17); } bos.flush(); bos.close(); bis.close(); } catch(Exception e) { e.printStackTrace(); } }

    • ベストアンサー
    • Java
  • 「得た値をCSV出力するJAVAプログラムを書きたい」

    「得た値をCSV出力するJAVAプログラムを書きたい」 固定したある点とクリックした点の距離は取得できました つまり、クリックするごとに2点間の距離は変わります 例えば 1回目:10cm 2回目:20cm 3回目:5cm とします 流れはクリック→10cmという値を取得→クリック→20cmという値を取得→・・・ するとCSVファイルには10,20,5という風に出力されるようにJAVAプログラムを書きたいです 色々調べたんですが、読み込みの方法がいまいちわかりません(全体的なこともですが・・・) データベースを読み込むとかはよく見かけるのですが。 また、実行したら勝手にCSVファイルが出来るのか? 下記のプログラムまでは出来ました import java.io.*; public static void main( String args[] ) { try { PrintWriter pw = new PrintWriter( new BufferedWriter( new FileWriter( "output.csv" ) ) ); pw.println( "kyori" ); System.out.println( "ファイルに書き込みました。" ); pw.close(); } catch( IOException exp ) { System.out.println( "入出力エラーです。" ); } } 何かアドバイスをお願いします。

  • Double,Longをファイルに書き込み

    以下のように、Double,Longをファイルに書き込もうとした場合、どのようにキャストをすればよろしいのでしょうか? (String)でString型への変換や Integer.parseInt等を試したのですが、できませんでした。よろしくお願いします。 import java.io.*; class test { public static void main(String[] args) { double dNumber = 3.45; long lNumber = 12345; BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt")); bw.write(dNumber); bw.write(lNumber); } //end main } //end class

    • ベストアンサー
    • Java
  • 続 1レコードを2レコードに分けて出力したい

    while( (line1=buf.readLine()) != null ) { 前スレQNo.7590029で解決した件で 今回は |(バーティカルバー)区切りで対応したいのですが 下記のようにカンマ部分を|(バーティカルバー)に置き換えると 配列ごとに1文字ずつ区切れてしまうのですが どのあたりを見直す形になるのでしょうか?? よろしくお願いします。 String[] 配列 = line1.split("|"); StringBuffer out = new StringBuffer(); //表レコード out.append("表"+"|"+連続番号+"|"+配列[0]+"|"+配列[1]+"|"+配列[2]); //レコード改行 out.append('\n'); //裏レコード out.append("裏"+"|"+配列[3]+"|"+配列[4]);

    • ベストアンサー
    • Java
  • javaプログラミング

    javaとYahooのWebサービスを利用して、検索結果のxmlを取り出し、 ○○.xmlという引数を与えて、結果を書き出そうとしていますが、 以下のプログラムだと文字(日本語)が化けてしまいます。 どうにかして文字化けせず取り出すことはできないでしょうか。 よろしくおねがいします。 import java.io.BufferedWriter; import java.io.FileWriter; import java.io.InputStream; import java.net.URL; public class YahooWebServiceExample { public static void main(String[] args) { String request = "http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch? appid=web_research&query=%e6%b2%96%e7%b8%84&results=2"; try { // ファイル出力ストリームを取得(第二引数) BufferedWriter bw = new BufferedWriter(new FileWriter(args[0])); URL url = new URL(request); InputStream in = url.openStream(); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { for (int i = 0; i < len; i++) { System.out.print((char) buf[i]); bw.write(buf[i]); } } in.close(); bw.close(); } catch (Exception e) { System.out.println("Web services request failed"); } } }

    • ベストアンサー
    • Java

専門家に質問してみよう