`
XiAoOMAn07
  • 浏览: 75656 次
  • 性别: Icon_minigender_1
  • 来自: 温州
社区版块
存档分类
最新评论

关于数据更新

阅读更多
先复制GuPiao2.txt (更新后的数据)的内容到GuPiao1.txt(暂存)再将网页数据抓取存入GuPiao.txt
取GuPiao.txt 的行的时间与GuPiao1.txt的行的时间进行比较,将新数据存入GuPiao2.txt.

方法是自己探索编写的,发现很笨拙存在较大问题,将尝试换思路考虑另外可行的方法

经验小结:先有全局的构思和清晰的思路是很重要的,在没有好的建模思想和在含糊的思路下出来的代码,后果将比想象中的严重,不但会花费更多的时间,而且导致代码难以阅读和完善

/*
 * import java.io.BufferedReader;
 * import java.io.File;
 * import java.io.FileReader;
 * import java.io.IOException;
 * import java.util.regex.Matcher;
 * import java.util.regex.Pattern;
*/
import java.net.*;
import java.io.*;
import java.util.regex.*;
import java.util.Scanner;
public class DataUpdate{

	public static void main(String[] args) throws IOException {

		Scanner sc = new Scanner(System.in);
		String s;
		String str = null;
		String str1 = null;
		int daima;
		int year;
		int jidu;
		int i = 0;
		int j = 0 ;
		System.out.println("输入股票代码");
		daima = sc.nextInt();
		System.out.println("输入要插入的年份");
		year = sc.nextInt();
		System.out.println("输入要插入的季度");
		jidu = sc.nextInt();
		
		
		//网页地址
//根据输入的股票代码插入的年份和季度进行查找
		URL gupiao = new URL("http://money.finance.sina.com.cn/corp/go.php/vMS_MarketHistory/stockid/" + daima +".phtml?year=" + year + "&jidu=" + jidu);
		//创建输入流
		BufferedReader br = new BufferedReader(new InputStreamReader(gupiao.openStream()));
//复制GuPiao.txt到GuPiao1.txt
		//创建输出文档	
		FileOutputStream fosout = new FileOutputStream("D:\\XiAoOMAn\\GuPiao1.txt");
		File file=new File("D:\\XiAoOMAn\\GuPiao.txt");//
		FileReader fr=new FileReader(file);//创建文件输入流 
		BufferedReader in=new BufferedReader(fr);//包装文件输入流,整行读取
		OutputStreamWriter owsout = new OutputStreamWriter(fosout);
		while ((str = in.readLine()) != null){
			
	 		owsout.write(str);
			owsout.write("\r\n") ;
		}
	owsout.close();
	fosout.close();//保存gupiao1.txt,关闭
		FileOutputStream fos = new FileOutputStream("D:\\XiAoOMAn\\GuPiao.txt");
	
		FileOutputStream fosreason = new FileOutputStream("D:\\XiAoOMan\\Gupiao2.txt");

		//创建输出流
		OutputStreamWriter ows = new OutputStreamWriter(fos);
		
		OutputStreamWriter owsreason = new OutputStreamWriter(fosreason);
		
		
		
		//匹配需要获取的数据的列名
		Pattern q = Pattern.compile("((?<=g>)(\\w*?)).*?(?=(</strong>))");
		//匹配数据
		Pattern p = Pattern.compile("((?<=date=)(\\w*?)).*?(?=('>))|((?<=center\">)(\\d{1,7}?)).*?(?=(</div>))");
		//将 gupiao.txt的内容存入gupiao1.txt
		while ((str = in.readLine()) != null){
			
		 		owsout.write(str);
				owsout.write("\r\n") ;
			}
		owsout.close();
		fosout.close();//保存gupiao1.txt,关闭
		//获取源文件内容 匹配 输出
		while ((str = br.readLine()) != null) {
			//j++;
			//列名
			Matcher n = q.matcher(str);
			//数据
			Matcher m = p.matcher(str);

			//提取 列名
			while (n.find()) {
				
				//形式转换 成 String
				s = String.valueOf(n.group());
				//输出到文本文档
				ows.write(s + "		 ");
				System.out.printf("%-44s", n.group());
				
			}
			//提取 数据
			while (m.find()) {
				if (i == 0){
					System.out.println();
					ows.write("\r\n");
				}
				i++;
				s = String.valueOf(m.group());
				ows.write(s + "	   ");
				System.out.printf("%-22s", m.group());
				//每输出完一行 回车
				if (i % 7 == 0)
				{
					System.out.println();
					ows.write("\r\n") ;
				}
			}
		
		}
		//System.out.println(j);
		ows.close();
		fos.close();
		br.close();
		fr.close();
		fosout.close();//关闭输出流。
		



功能未完善的程序部分,本来以为会比较简单,结果发现这个方法繁琐且不可行
/
		File file21=new File("D:\\XiAoOMAn\\GuPiao.txt");//
		File file22=new File("D:\\XiAoOMAn\\GuPiao1.txt");//
		FileReader fr21=new FileReader(file21);
		FileReader fr22=new FileReader(file22);
		BufferedReader in21=new BufferedReader(fr21);
		BufferedReader in22=new BufferedReader(fr22);
		str = in21.readLine();
		owsreason.write(str);
		owsreason.write("\r\n") ;
		in21.readLine();
		in22.readLine();
		in22.readLine();
		str = in21.readLine();
		str1 = in22.readLine();
		String[] date = str.split("-");//以 - 为间隔将一行数据拆分。2009-10-15 可以拆分为 2009 10 15
		String[] date1 = str1.split("-");
		int []num = new int[3]; 
		int []num1 = new int[3];
		num[0]=Integer.parseInt(date[0]);//转化为整数
		//num[1]=Integer.parseInt(date[1]);//
		//num[2]=Integer.parseInt(date[2]);//
		num1[0]=Integer.parseInt(date1[0]);//
		//num1[1]=Integer.parseInt(date1[1]);//
		//num1[2]=Integer.parseInt(date1[2]);//	
		if(num[0] > num1[0]){
			owsreason.write(str);
			owsreason.write("\r\n") ;
			while((str = in21.readLine()) != null){
				owsreason.write(str);
				owsreason.write("\r\n") ;
			}
				owsreason.write(str1);
				owsreason.write("\r\n") ;
				while((str1 = in22.readLine()) != null){
						owsreason.write(str1);
						owsreason.write("\r\n") ;
			}
		}
		
		else{
			owsreason.write(str1);
			owsreason.write("\r\n") ;
			while((str1 = in22.readLine()) != null){
					owsreason.write(str1);
					owsreason.write("\r\n") ;
			}
			owsreason.write(str);
			owsreason.write("\r\n") ;
			while((str = in21.readLine()) != null){
				owsreason.write(str);
				owsreason.write("\r\n") ;
		
			
		}
		
		owsreason.close();
		fosreason.close();

	}

	}
}
分享到:
评论

相关推荐

    mxy数据更新器

    "mxy数据更新器"是一款专门用于数据更新的工具,主要服务于那些需要实时或定期更新数据的用户。在IT行业中,数据更新是至关重要的,尤其是对于数据库管理、数据分析以及各种应用系统的正常运行。这款工具可能提供了...

    解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)

    数据更新时以为drawLine()函数在updated()里面执行(这种情况之前碰到过),后来发现热更新之后视图更新了,所以跟周期函数没有关系;参考了一下网上的一些资料,发现可以用vue中的watch()函数来监听数据的更新,...

    C# 批量插入和更新数据

    ### C# 批量插入和更新数据的知识点详解 #### 一、背景介绍 在数据库应用开发中,尤其是在处理大量数据的时候,批量插入和更新数据是提高效率的关键技术之一。传统的单条插入或更新方式在面对大数据量时,不仅耗时...

    vue数据更新但是界面却不刷新

    1. 数据更新未触发视图刷新的原因: - 数据绑定错误:确保你使用的是Vue的响应式属性(`data`、`props`、`computed`等)进行数据绑定,而非直接修改`this`上下文中的变量。 - 异步操作:Vue不会监听异步操作中对...

    Qt之模型/视图(实时更新数据)

    在Qt框架中,模型/视图(Model/View)架构是一种设计模式,它将数据处理与用户界面分离开来,使得数据的管理更加灵活,同时能够实现数据的实时更新。这个设计模式是基于MVC(Model-View-Controller)概念的,其中...

    多数据库基础地理信息数据联动更新研究

    数据现势性是数据服务能力的重要指标之一,多种地理信息数据库并存与分数据库独立更新的更新方式之间的矛盾日益凸显。文中提出了一种以共有要素为核心,采用增量更新包技术,同步更新多数据库的联动更新方法。选取兰州...

    VB 利用UPDATE语句批量更新数据表中的数据

    在VB(Visual Basic)编程环境中,我们经常需要与数据库进行交互,这包括读取、插入、更新和删除数据。在本教程中,我们将专注于“利用UPDATE语句批量更新数据表中的数据”这一主题。UPDATE语句是SQL语言的一个重要...

    Thinkphp批量更新数据的方法汇总

    以下小编给大家列出了三种实现thinkphp批量更新数据的方法,写的不好还请见谅,有意见欢迎提出,共同学习进步! 方法一: //批量修改 data二维数组 field关键字段 参考ci 批量修改函数 传参方式 function batch_...

    EXCEL表格用VBA更新双色球数据源代码

    本主题聚焦于如何利用VBA更新双色球数据源,这对于彩票数据分析或者爱好者来说是非常实用的。下面我们将深入探讨这个主题。 首先,VBA代码通常在Excel的宏(Macros)中编写。在“开发工具”菜单下,你可以找到宏...

    C# datagridview 与数据源绑定后对数据的,增加,删除,插入,更新

    本教程将深入探讨在C#中,当DataGridView与数据源绑定后如何进行数据的增加、删除、插入和更新操作。 ### 数据源绑定 首先,我们需要创建一个数据源,这可以是任何实现了`IList`或`IBindingList`接口的对象,如...

    vue列表数据发生变化指令没有更新问题及解决方法

    然后我们在搜索框中删选以后,数据更新了,但是图标没有更新 分析原因 (item, key='index'&gt; ... 问题就出在了:key=’index’因为vue中for循环是根据key的值的变化来更新vnode的,很显然我们经过筛选如果删选出...

    对表中数据进行更新

    对表中数据进行更新,习题对表中数据进行更新

    更新数据透视表的数据.xlsx源码EXCEL VBA宏编程xlsx实例代码下载

    更新数据透视表的数据.xlsx源码EXCEL VBA宏编程xlsx实例代码下载更新数据透视表的数据.xlsx源码EXCEL VBA宏编程xlsx实例代码下载更新数据透视表的数据.xlsx源码EXCEL VBA宏编程xlsx实例代码下载更新数据透视表的数据...

    android 版本更新 同时清除旧版本数据

    当“android 版本更新 同时清除旧版本数据”时,我们需要关注几个关键的技术点: 1. 版本检测:首先,应用需要能够自动检测到新的版本。这通常通过网络请求实现,例如通过HTTP GET请求到服务器上的更新API,该API...

    实时数据仓库环境下的数据流更新

    解决实时数据仓库数据流更新的一些,研究了一个实时数据库环境下的数据流更新算法

    SQL实验三--数据的更新操作和视图-实验报告.doc

    SQL实验三--数据的更新操作和视图-实验报告.doc

    三维数据属性更新.zip

    当前10i版本的iServer已经开始支持对三维的点、线、面以及模型进行更新操作(注:10i版本之前不支持,仅支持二维矢量数据更新),WebGL目前还没有直接的接口对接三维矢量及模型数据更新,但是可以通过对 features 资源...

    kettle合并记录处理同表数据更新等操作

    kettle合并记录处理同表数据更新等操作.doc

    C++与Qt实现QChart设置时间轴随数据实时更新

    在本文中,我们将深入探讨如何使用C++和Qt框架中的QChart组件来创建一个动态图表,其中的时间轴(X轴)能够随着数据的实时更新而自动调整。这个过程主要涉及Qt 5.8版本,以及Visual Studio 2013作为开发环境。我们将...

Global site tag (gtag.js) - Google Analytics