c++ 两个系统下 输出不一致。
void sql_output(vector <read_info> &reads)
{
ofstream out("reads_sql");
int count=reads.size();
for(int i=0;i <count;i++)
{
out < <i+1 < <'\t' < <reads[i].name < <'\t' < <reads[i].seq < <endl;
}
out.close();
}
在windows 下面 生成的map_sql文件正常 :
1 hfadf ACATACTACCTCACATCTACACTACACTATCTCAC
2 999 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
3 s1_1_220_26 ACGAAaaaAcCATTATTcTTGGTTTTATTGTTGGT
4 333 cTTGGTTTTATTGTTGGTTTTACCCAAAAgcGCCC
在linux下面 生成 这样呢(命令行下 more 看到的):
1 ACATACTACCTCACATCTACACTACACTATCTCAC
2 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
3 ACGAAaaaAcCATTATTcTTGGTTTTATTGTTGGT
4 cTTGGTTTTATTGTTGGTTTTACCCAAAAgcGCCC
在网页上看这个map_sql文件是这样的:
1 hfadf
ACATACTACCTCACATCTACACTACACTATCTCAC
2 999
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
3 s1_1_220_26
ACGAAaaaAcCATTATTcTTGGTTTTATTGTTGGT
4 333
cTTGGTTTTATTGTTGGTTTTACCCAAAAgcGCCC
把linux上这个文件下载到windows 下 用 ultraedit 打开:
1 hfadf
ACATACTACCTCACATCTACACTACACTATCTCAC?2 999
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT?3 s1_1_220_26
ACGAAaaaAcCATTATTcTTGGTTTTATTGTTGGT?4 333
cTTGGTTTTATTGTTGGTTTTACCCAAAAgcGCCC
[解决办法]
是不是因为linux和windoews对 换行 的处理不同
windows换行是\r\n,十六进制数值是:0D0A。
LINUX换行是\n,十六进制数值是:0A
所以在linux保存的文件在windows上用记事本看的话会出现黑点,我们可以在LINUX下用命令把linux的文件格式转换成win格式的。
unix2dos 是把linux文件格式转换成windows文件格式
dos2unix 是把windows格式转换成linux文件格式
[解决办法]
不同系统对换行的不同处理
在MS系统中,文本文件约定以一个回车加一个换行符(或称为行反馈符)结尾.但是UNIX系统只是一个换行符结尾.
提示:
标准包文本行定义为0或多个字符,后面跟一个表示结束的换行符,对于那些文本行的外在表现形式与这个定义不同的系统上,库函数负责外部形式和内部形式之间的编译.例如,在MS-DOS系统中,在输出时,文本中的换行符被写成一对回车/换行符.在输入时,文本中的回车符被丢弃.
二进制输入'\n'保存'\n'文本输入'\n'保存为"\r\n"