2019独角兽企业重金招聘Python工程师标准>>>

 package com.wh.sattp;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.OutputStreamWriter;
public class Dealhtml {private static String filepath="";private static String filepath_common="";private static String filepath_android="";/*处理的文件夹。在D:/satdeal/下根据地区创建文件夹,每个文件夹 下面 分为 txt common android 三个子文件夹txt中的数据为网站的源代码保存的txt文本数据。common为解析出的通用数据*///private static String FilePath="D:/satdeal/atlantic/";//private static String FilePath="D:/satdeal/europe/";//private static String FilePath="D:/satdeal/asia/";private static String FilePath="D:/satdeal/test/";public static void main(String[] args) {//列出当前文件夹里面的内容,删除掉common和android里面的文件File file=new File(FilePath+"txt");File files[]=file.listFiles();int size=files.length;filepath_common=FilePath+"/common/";filepath_android=FilePath+"/android/";System.out.println(System.currentTimeMillis());fileinit();for(int i=0;i<size;i++){filepath=files[i].getAbsolutePath();filepath_common=FilePath+"/common/";filepath_android=FilePath+"/android/";//System.out.println("str==" + filepath);dealfile(filepath);}System.out.println(System.currentTimeMillis());}/** 删除掉文件夹中原有的文件* */private static void fileinit(){File file=new File(filepath_common);File files[]=file.listFiles();int csize=files.length;for(int i=0;i<csize;i++){files[i].delete();}file=new File(filepath_android);files=file.listFiles();csize=files.length;for(int i=0;i<csize;i++){files[i].delete();}}/** 拿到指定的txt文本 开始解析数据 * 1.解析<title> 里面包含卫星名及经度,* 2.确定common 和android下面的文件名* */private static void dealfile(String path) {File file = new File(path);FileInputStream ins;try {ins = new FileInputStream(file);int readsize;byte b[] = new byte[1024000];String str=null;while ((readsize = ins.read(b)) >= 0) {System.out.println("readsize=====" + readsize);byte first[]=new byte[100];for(int g=0;g<100;g++){first[g]=b[g];}String fis=new String(first);int index1=fis.indexOf("<title>");int index2=fis.indexOf("</title>");String filename=fis.substring(index1+7, index2).replace('\\',' ');filename=filename.replace('/', ' ');filepath_common+=filename+".txt";filepath_android+=filename+".xml";System.out.println("filename=====" + filename);//<title>Thor 5 at 0.8°W - LyngSat</title>str += new String(Byte_dealto_String(b,readsize));//System.out.println("str=====" + str);}dealstr(str); } catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** 处理传入的byte数组* 规则:1.先取出所有的 HVRL字符;*     2.原样过滤掉前五个和最后五个数据    实际传入的数据是要<1024000的*     3.判断连续的四个数字或者五个数字(频率和符号率都是4位或者5位的)*    freq的两种格式:  >123456&   和> 1234&*    symb的两种格式: >12345-    和>1234-*   取出用count标示:*      小于4时跳过相同个数*      count==10 4位freq*      count==11 4位symb*      count==20 5位freq*      count==21 5位symb*   4.freq 用<>包裹起来   symb 用* #并转行包裹  返回有效byte数组* * */private static byte[] Byte_dealto_String(byte[] b,int size) {byte c[] = new byte[10240];int j = 0;//int size = b.length;//System.out.println("size===="+size);for (int i = 0; i < size; i++) {int count=1;if((b[i]=='H'||b[i]=='V')||(b[i]=='R'||b[i]=='L')){if(i-2>=0&&b[i-1]==';'&&b[i-2]=='p'&&b[i+1]=='<'){c[j] = b[i];j++;}}if (i < 5 || i > size-5) {if (b[i] >= '0' && b[i] <= '9') {c[j] = b[i];j++;}} else {if (b[i] >= '0' && b[i] <= '9') {count=1;if (b[i + 1] >= '0' && b[i + 1] <= '9') {count=2;if (b[i + 2] >= '0' && b[i + 2] <= '9') {count=3;if (b[i + 3] >= '0' && b[i + 3] <= '9') {count=4;if(b[i-1]=='>'||(b[i-2]=='>'&&b[i-1]==' ')){if(b[i + 4] >= '0' && b[i + 4] <= '9'){ count=5;if(b[i + 5] == '&'){count=20; }else if(b[i + 5] == '-'){count=21; }}else if(b[i + 4] == '&'){count=10;}else if(b[i + 4]=='-'){count=11;}} }}}}}if(count<4){i+=count-1;}else{if(count>5&&count<20){//freqif(count==10){c[j]='<';j++;}else if(count==11){c[j]='*';j++;}c[j]=b[i];j++;i++;c[j]=b[i];j++;i++;c[j]=b[i];j++;i++;c[j]=b[i];j++;i++;if(count==10){c[j]='>';j++;}else if(count==11){c[j]='#';j++;c[j]='\n';j++;}}if(count>12){//freqif(count==20){c[j]='<';j++;}else if(count==21){c[j]='*';j++;}c[j]=b[i];j++;i++;c[j]=b[i];j++;i++;c[j]=b[i];j++;i++;c[j]=b[i];j++;i++;c[j]=b[i];j++;i++;if(count==20){c[j]='>';j++;}else if(count==21){c[j]='#';j++;c[j]='\n';j++;}}}}c[j]=' ';j++;c[j]=' ';byte d[] = new byte[j];int dsize=d.length;for(int k=0;k<j;k++){d[k]=c[k];}return d;}/** 处理得到的数据。* 根据 \n来切出字符串数组   此时有效数据为<12345>V*67890#*   解析数组 先找到 VHRL*的组合定位 < #的位置*   规则 : 1.已VHRL为起始 前6和前7 定位<  后6后7定位#*    2.按照定位切割有用数据 保存为 <12345>V*67890*      判断检测切割的数据  *         1.检测 >  位置应该大于等于5且小于等于6  *         2.判断<>中的数字 应该在3000-13000之间*      *      *    解析完毕 开始存储数据到指定文件夹    * */private static void dealstr(String str){String all[]=str.split("\n"); //System.out.println("str===" + all.length);int size=all.length;int count=0;String strnew[]=new String[200];for(int i=0;i<size;i++){byte bstr[]=all[i].getBytes();int len= bstr.length;for(int j=0;j<len;j++){if((bstr[j]=='R'||bstr[j]=='L'||bstr[j]=='H'||bstr[j]=='V')&&bstr[j+1]=='*'){int first=0;int end=0;if(j-7>=0&&bstr[j-7]=='<'){first=j-7;}if(j-6>=0&&bstr[j-6]=='<'){first=j-6;}if(j+7<len&&bstr[j+7]=='#'){end=j+7;}if(j+6<len&&bstr[j+6]=='#'){end=j+6;}String str_us=all[i].substring(first, end);//System.out.println("str_us==" + str_us);int freqindex=str_us.indexOf('>');if(freqindex<=4){System.out.println(" Error**** freqindex=" + freqindex+"  str_us="+str_us);continue;}String strfreq=str_us.substring(1, freqindex);int freq=Integer.valueOf(strfreq);if(freq>13000||freq<3000){System.out.println("Error****  freq==" + strfreq);//continue;}else{strnew[count]=all[i].substring(first, end);count++;}break;}}}try {FileWriter fw = new FileWriter(filepath_common,true);    String allstr="";for(int i=0;i<count;i++){ int lens=strnew[i].length();if(lens<11||lens>15){System.out.println("Error:****"+filepath_common+"****"+strnew[i]);}else{fw.write(strnew[i]+"\n",0,lens+1);}  }fw.flush(); }catch(Exception e){System.out.println(e.toString());}String_toandroid_file(strnew,count);}/** 将数据保存为需要的android  xml数据* 数据原样为<12345>V*67890*   1.先替换<> 数据变为    <transponder frequency="12345000" symbol_rate="V*67890*   2.在将字串切为   <transponder frequency="12345000" symbol_rate="V    67890*   3.在切为  <transponder frequency="12345000" symbol_rate="   V *   4.拼凑 <transponder frequency="12345000" symbol_rate="67890000"*   5.最后<transponder frequency="12345000" symbol_rate="67890000" polarisation="V"/>* * */private static void String_toandroid_file(String allstr[],int count){int size=allstr.length;for(int i=0;i<count;i++){//<10962>H*1550String str=allstr[i];str=str.replaceAll( "<","<transponder frequency=\"");str=str.replaceAll( ">","000\" symbol_rate=\"");String strw[]=new String[2];int index=str.indexOf('*');strw[0]=str.substring(0, index);strw[1]=str.substring(index+1, str.length());int length=strw[0].length();String strq=strw[0].substring(length-1, length);String stra=strw[0].substring(0,length-1);stra+=""+strw[1]+"000\"";if(strq.equals("H")||strq.equals("L")){stra+= " polarisation=\"H\"/>";}else{stra+= " polarisation=\"V\"/>";}stra+="\n";allstr[i]=stra;}try {FileWriter fw = new FileWriter(filepath_android,true);    //String allstr="";for(int i=0;i<count;i++){ fw.write(allstr[i],0,allstr[i].length());   }fw.flush(); }catch(Exception e){System.out.println(e.toString());}}
}

转载于:https://my.oschina.net/u/865093/blog/372272

lyngsat网站卫星数据解析相关推荐

  1. 高清卫星影像DEM各个遥感卫星数据免费下载,3款软件4个网站推荐给你,从此不再为数据发愁

    在上大学时听老师过一句话"一入遥感深似海,从此数据永相随" 不过不仅遥感处理需要各种数据来练习学习,整个测绘地信行业在工作中也需要各种数据来辅助项目处理.没办法,做数据处理就是要一 ...

  2. APM-GPS数据解析之一

    一.概述 当前主流的卫星导航系统主要有中国的北斗,美国的GPS,俄罗斯的GLONASS和欧洲的伽利略.同一时刻,我们的头顶上飞过各家数量各异的导航卫星.在一些全球定位模块中,有的可以同时接收各家导航卫 ...

  3. 常见的免费遥感卫星数据服务网站

    ** 常见的免费遥感卫星数据服务网站 ** 其他的文章链接: 0.遥感常用资料一览: https://blog.csdn.net/weixin_44143671/article/details/101 ...

  4. Python通过Django搭建网站执行Lua脚本 (实现数据解析)

    目录 Python通过Django搭建网站执行Lua脚本 (实现数据解析) 一.问题背景和解决 二.执行Lua效果预览 三.主要代码解析: translate.py LuaParser.lua Bin ...

  5. linux下json数据解析,JSON数据解析 - iOS学习笔记_Linux编程_Linux公社-Linux系统门户网站...

    在之前的<iOS学习--xml数据解析(九)>http://www.linuxidc.com/Linux/2014-02/97020p9.htm 介绍了xml数据解析,这一篇简单介绍一下J ...

  6. 遥感影像云检测-现有光学遥感卫星数据参数合集

    现有光学遥感卫星 1.MODIS卫星介绍 1.1.MODIS传感器简介 1.2.MODIS传感器基本参数 1.3.MODIS 数据特点及波段分布特征 1.4.MODIS 数据产品产品级别及类型 1.4 ...

  7. iOS - XML 数据解析

    前言 @interface NSXMLParser : NSObjectpublic class NSXMLParser : NSObject 1.XML 数据 XML(Extensible Mark ...

  8. 卫星数据现已加入 Azure 豪华套餐,在太空向女神表个白?

    近日,微软特别项目研究小组刚刚宣布把2年前沉入苏格兰北部冰冷海底的小型水下数据中心打捞上岸,这个像缩小版"潜水艇"的数据中心里有 864 台服务器.27.6 PB的数据存储.潜过水 ...

  9. Android学习之JSON数据解析

    在Android应用开发中,常用的数据交换格式有XML和JSON,这两种方式各有各的好处,我们在特定的应用开发中可以选择合适的一种.下面来看一下JOSN数据解析: 例子永远是最好的教程,下面我们来看个 ...

最新文章

  1. HDU5709 : Claris Loves Painting
  2. javaweb_JSP 的 include 指令的程序
  3. MOOC数学建模与实验---学习笔记---整理汇总表
  4. 解决 锁定文件失败 打不开磁盘“D:\ubuntu\Ubuntu 64 位.vmdk”或它所依赖的某个快照磁盘。 模块 Disk”启动失败...
  5. 问题:There are no packages available for installation 问题的解决办法
  6. AppDelegate文件下各方法的用法:(应用程序挂起、复原与终止)
  7. 三菱plc编程软件gx-developer在win10中无法使用及工程无法建立解决方法
  8. java gb2312中文乱码_Java中文乱码问题(转)
  9. SpringBoot启动报错(一篇教你如何处理mapper绑定问题) BindingException: Invalid bound statement (not found)
  10. ext.js解决html乱码,extjs 中文乱码
  11. px4讲解(一)历史起源
  12. 7.15周三晚8点,dotnet课堂全新起航,张善友/陈计节/刘腾飞我们一起来聊聊abp的故事...
  13. 从达特茅斯会议到图灵奖---人工智能学习分享
  14. win10计算机错误代码,win10电脑更新失败提示错误代码0x80070424修复方法
  15. 厦门大学854结构力学(含结构动力学)考研参考书目
  16. IC技术圈期刊 2021年第2期
  17. Activity跳转后自动执行了onDestroy
  18. Android 渲染机制——SurfaceFlinger
  19. Fastadmin和Easywechat
  20. NAO机器人的Walk功能

热门文章

  1. 自考计算机本科怎么学,自考经验:3至5年拿计算机自考本科文凭
  2. 浏览器输入字无法显示选字框问题
  3. vue cli安装贼慢解决办法
  4. 移动硬盘无法安全弹出解决方法
  5. 浅谈科学与艺术交融——艺工交叉
  6. 线性CCD图像传感器行业调研报告 - 市场现状分析与发展前景预测
  7. 带小数的大数相加,C++实现
  8. Windows 2000系统编程 (1)
  9. 在win2000下安装mysql完全版本(转)
  10. 从滴滴的仇广宇到FB的王美宏,快手的国际化究竟野心有多大?