• ベストアンサー

続 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
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

split の引数.

参考URL:
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/regex/Pattern.html
ITJack
質問者

お礼

\\|で対応出来ました。 どうもありがとうございました。

関連するQ&A

  • 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レコードを2レコードに分けて出力

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

    • ベストアンサー
    • Java
  • テーブルにレコードを追加するサーブレット。

    HTML画面からservletに接続してMYSQLにてつくったデータベースのテーブルに レコードを追加するプログラム(servlet)を作っています。テーブルを表示させるservlet(ext_db5_2_1.java)と、テーブルにレコードを追加して前出のservlet(ext_db5_2_1.java)を呼び出しテーブル表示をさせるservlet(ext_db5_2_2.java)をつくってます。 windows2000Professional, j2sdk1.4.0_01, MySQL3.23.47, tomcat3.3.1 テーブルにレコードを追加するサーブレット(ext_db5_2_2.java)の問題箇所。 // データベースに追加する値を取得 String number = request.getParameter("number"); String name = new String( request.getParameter("name").getBytes("8859_1"), "JISAutoDetect"); String from_pref =new String( request.getParameter("from_pref").getBytes("8859_1"), "JISAutoDetect"); // SQLを実行して、データベースに追加する StringBuffer buf = new StringBuffer(); buf.append("INSERT INTO OOIWA_SEM ("); buf.append("NUMBER, NAME, FROM_PREF) "); buf.append("VALUES ("); buf.append(number); buf.append(",'"); buf.append(name); buf.append("','"); buf.append(from_pref); buf.append("')"); stmt.executeUpdate(buf.toString()); // データベース表示するために、RequestDispatcherを取得 ServletContext cx = getServletContext(); RequestDispatcher rd =                          cx.getRequestDispatcher("/netjv/servlet/shuwa.ext_db5_2_1");

  • jspのプログラムについて

    jspファイルで データベースの中のテーブルの中身をCSVファイルに出力するプログラムを教えてください。 delete文で中身を消すプログラムは書けたのですが、これはできません。 conn = null; st=null; conn=DriverManager.getConnection("jdbc:mysql://localhost/データベース名?" + "user=ユーザー名&password=パスワード&useUnicode=true&characterEncoding=utf8"); st=conn.createStatement(); StringBuffer buf = new StringBuffer(); buf.append("delete from where id="+id); st.executeUpdate(buf.toString()); これで削除はできました。 なのでbuf.appendの中身を buf.append("SELECT from テーブル名 INTO OUTFILE "c:/data" "); これに書き換えればできると思ったのですができません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • javaのfor文の使い方

    コマンドライン引数で入力した文字が3文字以下ならその文字列を20個文字連結して表示し、4文字以上ならたくさんと表示したいのですが表示できません。 import java.io.*; public class ABC { public static void main(String args[])throws IOException{ BufferedReader myReader = new BufferedReader( new InputStreamReader(System.in), 1 ); String str = myReader,readLine(); if(str.length() >= 4){ System.out.println("たくさん"); } StringBuffer buf = new StringBuffer(str.length()*20); for(int i = 0;i < 20; i++){ buf.append(str); System.out.println(buf); } } } としたら、たくさんと表示されません。どこを修正すればいいでしょうか?ちなみにfor文とStringBufferクラスを用いてというのが条件です。

  • サーブレットでデータベース操作。

    サーブレットを使ってMySQL内のテーブルにレコードを追加、変更、削除できるようなプログラムを作っています。流れとしましては『HTML画面→サーブレット起動→レコード追加、変更、削除』といった具合です。追加、変更ができてなぜか削除だけできません。SQL文を書き換えるだけのはずなのですが・・。どなたか教えて下さい。windows2000Professional, j2sdk1.4.0_01, Tomcat3.3.1,MySQL3.23.47 略 . . Connection con = null; Statement stmt = null; try { con = DriverManager.getConnection( "jdbc:mysql://localhost/db_ichat", "root", "pen3"); stmt = con.createStatement(); String seqno = request.getParameter("seqno"); String name = request.getParameter("name"); String namejp = new String(name.getBytes("8859_1"), "JISAutoDetect"); String psw = request.getParameter("psw"); String pswjp = new String(psw.getBytes("8859_1"), "JISAutoDetect"); String email = request.getParameter("email"); StringBuffer buf = new StringBuffer(); buf.append("delete from t_id "); buf.append("where seqno = "); buf.append(seqno); stmt.executeUpdate(buf.toString()); try { stmt.close(); } catch (Exception e) {} try { con.close(); } catch (Exception e) {} . . 略。

    • ベストアンサー
    • Java
  • for文とStringBuffer

    javaのfor文の使い方 質問者:asutarisuk コマンドライン引数で入力した文字が3文字以下ならその文字列を20個文字連結して表示し、4文字以上ならたくさんと表示したいのですが表示できません。 import java.io.*; public class ABC { public static void main(String args[])throws IOException{ BufferedReader myReader = new BufferedReader( new InputStreamReader(System.in), 1 ); String str = myReader,readLine(); if(str.length() >= 4){ System.out.println("たくさん"); } StringBuffer buf = new StringBuffer(str.length()*20); for(int i = 0;i < 20; i++){ buf.append(str); System.out.println(buf); } } } としたら、たくさんと表示されません。どこを修正すればいいでしょうか?ちなみにfor文とStringBufferクラスを用いてというのが条件です。

    • ベストアンサー
    • Java
  • splitの使用方法

    String.split の使用に関してです。 ファイルから一行づつ読み出して split で切って配列にしたいと考えています。 ファイルの中身は 1|ssm3u|00000| 2|ssm3u|11111| のように「|」区切りになっています。 通常のcsv等、カンマ区切りのファイルは split(","); を使用して問題なくできたのですが、 split("|"); と書くと、 「|」ではなく、1文字ごとに切ってしまいます。 どうすれば「|」ごとに切ることができるのでしょうか? あるいは、私のプログラム記述ミスでしょうか?

  • C# ジェネリックメソッドでCSVの読み込み

    以下のメソッドをジェネリックメソッドにしたいのですが、 Double.Parseメソッドの部分をどう変更したらいいのかわかりません。 どなたか方法を教えてください! //CSVデータをdouble配列に格納する public static void readCSV(double[] a, string filePath) { int i = 0; char delimiter = ','; //区切り文字はカンマ string line = ""; using (StreamReader r = new StreamReader(filePath)) { while ((line = r.ReadLine()) != null) // 1行ずつ読み出し。 { //分割した結果を文字列の配列で受け取る string[] splittedResult = line.Split(delimiter); a[i] = (Double.Parse(splittedResult[0])); i++; } } } //ジェネリックバージョン public static void readCSV<Type>(Type[] a, string filePath) { int i = 0; char delimiter = ','; //区切り文字はカンマ string line = ""; using (StreamReader r = new StreamReader(filePath)) { while ((line = r.ReadLine()) != null) // 1行ずつ読み出し。 { //分割した結果を文字列の配列で受け取る string[] splittedResult = line.Split(delimiter); //Double.ParseをTypeを用いてどう記述していいかわからない a[i] = (Double.Parse(splittedResult[0])); i++; } } }

  • Zipファイル解凍処理について

    こんにちわ。 Javaの解凍処理について質問です。 Test.zipがあって、その中身が「テスト.xls」とした時、うまく解凍ができません。 Zipファイルの中身が日本語名ではなく、「Test.xls」であれば正常に解凍ができます。 下記の書き方では日本語名のファイルの入ったZipファイルを解凍することはできないのでしょうか? どなたかご教授お願い致します。 String fname = null; FileInputStream fis = null; BufferedInputStream bis = null; ZipInputStream zis = null; ZipEntry zent = null; FileOutputStream fos = null; try { fis = new FileInputStream(FilePath); bis = new BufferedInputStream(fis); zis = new ZipInputStream(bis); byte[] buf = new byte[1024]; int len; // アーカイブ中に含まれるファイル情報の取得 while ((zent = zis.getNextEntry()) != null) { int intResult = zent.toString().indexOf("."); int intLength = zent.toString().length(); //ファイル名の変更(フォルダ名+社員コード)StringBuffer BuffRename = new StringBuffer(); BuffRename.append("D:\\test\\"); BuffRename.append(zent.getName().substring(0,intResult)); BuffRename.append(SyainCd); BuffRename.append(zent.getName().substring(intResult,intLength)); fname = BuffRename.toString(); //書き込みファイルをオープン fos = new FileOutputStream(fname); while (-1 != (len = zis.read(buf, 0, buf.length))) { fos.write(buf, 0, len); } //★★★ fos.close(); } Catch・finallyは省略