最速怪談選手権

こんにちわ。今MySQLを使ってテーブルの作成をしているのですが、やり方に自信がないため質問させていただきます。

test.txtに以下の情報が入っているとします。(ゲノムの情報になります)
*****
id count start_position end_position
1 2 51091076,51101385,51091253,51102009,
2 3 112644827,112647824,112648979,112645084,112647981,112649152,
3 3 30103583,30105062,30106006,30103918,30105414,30106086,
*****
countのコラムにはstart_position, end_positionに何個の値が入るのかを示しています。

ここから、test_tableというのをつくり、以下の形にしたいのです。
id start_position end_position
1 51091076 51091253
1 51101385 51102009
2 112644827 112645084
2 112647824 112647981
2 112648979 112649152
3 30103583 30103918
3 30105062 30105414
3 30106006 30106086

test.txtを使って.
LOAD DATA INFILE 'test.txt'
INTO TABLE test_table
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n';
と全体のテーブルを作りました。この際、start_position, end_positionの値にはカンマが入る形になってしまいます。

上記のテーブルを作成するため、まず、idだけのテーブルを作ろうと思い、

SELECT REPEAT(CONCAT(id, '\r'), EXONCOUNT) FROM test_table INTO OUTFILE 'id_count.txt';
LOAD DATA INFILE 'id_count.txt' INTO TABLE id_count LINES TERMINATED BY '\r';
を実行し、
positionだけのテーブルも以下のように用意しました。
SELECT REPLACE(start_position, ',', '\r') FROM test_table INTO OUTFILE 'start.txt';
LOAD DATA INFILE 'start.txt' INTO TABLE start LINES TERMINATED BY '\r';

そうすると、
id_countテーブルは
***
| 1 |
| 1 |
|
2 |
| 2 |
| 2 |
|
3 |
| 3 |
| 3 |
***
と表記され、

startテーブルは
**********
| 51091076 |
| 51101385 |
| 0 |
| 112644827 |
| 112647824 |
| 112648979 |
| 0 |
| 30103583 |
| 30105062 |
| 30106006 |
| 0 |
**********

と0が入ってしまいます。
start_positionとend_positionの値の最後のコンマを外してからやればできるのかもしれませんが、ほかに方法がありましたら教えていただけると嬉しいです。

わかりにくい点があるかもしれませんが、お願いいたします。

A 回答 (1件)

どうやら改行文字の問題のように見受けられます。


記載のコードを修正するならば、

> SELECT REPLACE(start_position, ',', '\r') FROM test_table INTO OUTFILE 'start.txt';

の部分を

SELECT REPLACE( REPLACE( REPLACE( start_position, char(13), ''),char(10),''),',','\r') FROM test_table INTO OUTFILE 'start.txt';

として改行文字を取り除いてみてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!