如何读取二维坐标轴上的数据到txt文件里
--------------------编程问答-------------------- 你“二维坐标轴上的数据”是以什么方式存储的?或者说组织的? 是个二维数组,还是个啥? --------------------编程问答-------------------- 上面的二维坐标轴上的数据也是一个txt文件。读取这个txt文件,转换成6 1 4
7 1 1
8 1 4
6 2 1
7 2 1
8 2 1
.......
这种形式的result.txt文件
--------------------编程问答-------------------- 理解了,不算太复杂,如果你只是要算法思路的话,大致这样就行了:
用FileWriter打开目标文件(输出结果用的);
用Scanner配合FileReader打开源数据文件,然后逐行读取(第一行不用管了,反正没啥用);
然后针对每一行:
001||..........040104..........
可以发现:前5个字符是没意义的(行号可以自己算,当然你也可以取前三个字符然后转为数字)。
实际上就是对该行进行逐个字符的遍历,类似: for (int i=5;i<line.length();i++)
判断字符是否不等于 句号,类似: line.chatAt(i) != '.'
如果不等于句话,就用FileWriter输出:i-4 行号 line.chatAt(i)
自己先写写看,搞不定,再把代码贴上来讨论。 --------------------编程问答-------------------- 我想参考一下你的代码。 --------------------编程问答--------------------
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class test5 {
public static void main(String[] args) throws IOException {
FileWriter fw=null;
BufferedReader br =null;
try {
br= new BufferedReader(new FileReader("D://习题//習題1//源文件//座標檔2.txt"));
fw = new FileWriter("d://result5.txt");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String buf ="";
try {
for(int j=0;j<105;j++){
while ((buf=br.readLine())!= null){
for(int i=6;i<buf.length();i++){
if(buf.charAt(i)!='.'){
fw.write(buf);
System.out.println();
}}
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
为什么分不了行,上面说错了竖行是x轴,横行是y轴
预期结果是:(最后一列不要管)
1 6 4 5
1 7 1 5
1 8 4 1
2 6 1 6
2 7 1 5
2 8 1 1
3 6 1 7
3 7 1 6
3 8 1 2
4 6 1 8
4 7 1 7
4 8 1 3
5 5 1 5
5 6 1 1
5 7 1 8
...... --------------------编程问答-------------------- --------------------编程问答--------------------
没看见你分行了。
另外你的循环逻辑错误;输出也少了很多东西。
int row = 1;
while ((buf=br.readLine())!= null){
for(int i=5;i<buf.length();i++){
if(buf.charAt(i)!='.'){
String tmp = row + " " + (i-4) + " " + buf.charAt(i) + "\n";
fw.write(tmp);
System.out.print(tmp);
}
}
row++;
}
--------------------编程问答-------------------- 修改后结果是很像也分行了,但是为什么得不到预期结果?
修改后的结果是:
1 1 0
1 2 1
1 3 0
1 4 2
1 5 0
1 6 3
1 7 0
1 8 4
1 9 0 --------------------编程问答-------------------- 读文件时要从第二行开始读取,因为第一行是y坐标
用charat 读取的是一个字节,但是二维坐标上的数据10以下是2位数 比如7写的是07,所以要读两位。
怎么修改呢? --------------------编程问答-------------------- “读文件时要从第二行开始读取,因为第一行是y坐标”
那么在循环开始之前,先用一个readLine()跳过第一行。
“用charat 读取的是一个字节,但是二维坐标上的数据10以下是2位数 比如7写的是07,所以要读两位。
怎么修改呢?”
那个坐标其实没啥意义,而且我看你后面的那些信息并没有跟坐标对齐,是紧凑型的,所以不管那个坐标就行了。
--------------------编程问答-------------------- 我解决了问题谢谢了。现在想要反过来,将:
1 6 4 5
1 7 1 5
1 8 4 1
2 6 1 6
2 7 1 5
......
这里面的input.txt的数据写在下面的二维坐标轴上output.txt上,可以截取每行数据写入数组,但是如何将z定位在坐标轴上呢?不要太难的代码
01020304050607080910111213
001||..........040104..........
002||..........010101..........
003||..........010101..........
004||..........010101..........
005||........0101010101........
006||........0101010101........
007||........0101010101........
008||........0101010101........
009||......01010101010101......
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
public class test6 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br =null;
PrintStream ps=null;
try {
br= new BufferedReader(new FileReader("D://input.txt"));
ps=new PrintStream("d://output.txt");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String buf="";
while ((buf=br.readLine())!= null) {
String[] sa = buf.split("\\s+");
int x = Integer.valueOf(sa[0]);
int y = Integer.valueOf(sa[1]);
int z = Integer.valueOf(sa[2]);
}
ps.printf(" ");
for (int i=0; i<12; i++) {
ps.printf("%02d", i+1);
}
ps.println();
for (int i=0; i<190; i++) {
ps.printf("%03d||", i+1);
ps.println();
}
}
}
补充:Java , Java EE