先复制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();
}
}
}
分享到:
相关推荐
在当今信息高速发展的时代,数据更新已成为日常工作中不可或缺的一部分。尤其在IT行业,无论是数据库管理、数据分析还是确保应用系统稳定运行,都对数据的时效性和准确性有着极高的要求。针对这些需求,"mxy数据更新...
查询数据及更新数据.ppt查询数据及更新数据.ppt
数据更新时以为drawLine()函数在updated()里面执行(这种情况之前碰到过),后来发现热更新之后视图更新了,所以跟周期函数没有关系;参考了一下网上的一些资料,发现可以用vue中的watch()函数来监听数据的更新,...
### C# 批量插入和更新数据的知识点详解 #### 一、背景介绍 在数据库应用开发中,尤其是在处理大量数据的时候,批量插入和更新数据是提高效率的关键技术之一。传统的单条插入或更新方式在面对大数据量时,不仅耗时...
1. 数据更新未触发视图刷新的原因: - 数据绑定错误:确保你使用的是Vue的响应式属性(`data`、`props`、`computed`等)进行数据绑定,而非直接修改`this`上下文中的变量。 - 异步操作:Vue不会监听异步操作中对...
在LabVIEW中与数据库交互是常见的需求,本教程将详细介绍如何使用LabVIEW进行数据库的表格创建、数据更新、数据删除、数据查询以及数据插入,并展示如何显示这些数据。 首先,我们需要理解LabVIEW中的数据库接口。...
ECharts是一款由百度开发的,基于...通过理解ECharts的图表配置和AJAX的异步请求原理,我们可以实现各种动态数据更新的效果。在实际项目中,还需要考虑到数据安全、性能优化等问题,确保系统的稳定性和高效性。
在Qt框架中,模型/视图(Model/View)架构是一种设计模式,它将数据处理与用户界面分离开来,使得数据的管理更加灵活,同时能够实现数据的实时更新。这个设计模式是基于MVC(Model-View-Controller)概念的,其中...
本课程主要聚焦于如何利用Navicat来更新MySQL数据库中的数据,涵盖数据的插入、修改和删除操作,旨在帮助用户熟练掌握数据库管理的基本技能。 1. **使用Navicat工具插入数据** 在Navicat中插入数据涉及到以下步骤...
本文将深入探讨如何使用Mybatis拦截器来记录数据更新历史记录,并将其存储到MongoDB中。 首先,我们来理解Mybatis拦截器的原理。Mybatis的拦截器是基于Java的动态代理机制实现的,它允许我们在特定的执行点(如SQL...
在VB(Visual Basic)编程环境中,我们经常需要与数据库进行交互,这包括读取、插入、更新和删除数据。在本教程中,我们将专注于“利用UPDATE语句批量更新数据表中的数据”这一主题。UPDATE语句是SQL语言的一个重要...
今天我们就来介绍一下在PyQtGraph中根据实时数据更新绘制图形。 今天的例子我们通过编写一个电脑CPU实时使用率助手来讲解。 一、通过Python获取实时的CPU信息 在Windows操作系统的电脑上,我们通过“任务管理器”...
在IT行业中,数据库管理和数据更新是一项关键任务。批量更新历史数据是常见的需求,尤其是在大数据量的情况下,为了提高效率和确保数据一致性,通常会采用分批更新的策略。本主题聚焦于“批量更新历史数据每10000...
以下小编给大家列出了三种实现thinkphp批量更新数据的方法,写的不好还请见谅,有意见欢迎提出,共同学习进步! 方法一: //批量修改 data二维数组 field关键字段 参考ci 批量修改函数 传参方式 function batch_...
本教程将深入探讨在C#中,当DataGridView与数据源绑定后如何进行数据的增加、删除、插入和更新操作。 ### 数据源绑定 首先,我们需要创建一个数据源,这可以是任何实现了`IList`或`IBindingList`接口的对象,如...
然后我们在搜索框中删选以后,数据更新了,但是图标没有更新 分析原因 (item, key='index'> ... 问题就出在了:key=’index’因为vue中for循环是根据key的值的变化来更新vnode的,很显然我们经过筛选如果删选出...
更新数据透视表的数据.xlsx源码EXCEL VBA宏编程xlsx实例代码下载更新数据透视表的数据.xlsx源码EXCEL VBA宏编程xlsx实例代码下载更新数据透视表的数据.xlsx源码EXCEL VBA宏编程xlsx实例代码下载更新数据透视表的数据...
使用PLSQL语句对表中数据进行更新,对表中数据进行更新
解决实时数据仓库数据流更新的一些,研究了一个实时数据库环境下的数据流更新算法
本项目“DataGridView多表更新数据”专注于利用`DataGridView`处理多表查询以及将这些数据更新到SQL Server数据库中。这个过程涉及到多个关键知识点,下面我们将详细探讨。 首先,`DataGridView`控件是Windows ...