当前位置:编程学习 > JAVA >>

如何读取二维坐标轴上的数据到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
...... --------------------编程问答-------------------- --------------------编程问答--------------------
引用 5 楼  的回复:
为什么分不了行,上面说错了竖行是x轴,横行是y轴

没看见你分行了。
另外你的循环逻辑错误;输出也少了很多东西。

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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,