当前位置:首页 > 开发 > IT生活 > 正文

删除citeulike导出的bib文件中的中文字符,使之能在WinEdt中读取

发表于: 2012-12-06   作者:cherishLC   来源:转载   浏览次数:
摘要: 在使用Citeulike http://citeulike.org/导出bib文件时,发现导出的文件在WinEdt中无法被识别。。。也就是\cite{}后不弹出提示 后来发现是有中文文献的缘故。。。。干脆写了个小程序去除中文字符。 顺带去除citeulike开头的行。 程序功能: 删除当前文件夹下的bib文件中以"citeulike" 开头(不含空格)的
在使用Citeulikehttp://citeulike.org/导出bib文件时,发现导出的文件在WinEdt中无法被识别。。。也就是\cite{}后不弹出提示
后来发现是有中文文献的缘故。。。。干脆写了个小程序去除中文字符。
顺带去除citeulike开头的行。


程序功能:
  • 删除当前文件夹下的bib文件中以"citeulike" 开头(不含空格)的行
  • 非ASCII字符的行。
  • 原文件名称加.origin
  • 生成的文件与原文件同名

编译好的Jar文件见附件

package lc.bibtex;

import java.io.*;

import javax.swing.JOptionPane;

public class DealWithCiteulikeBibFile {
	//删除当前文件夹下的bib文件中以"citeulike" 开头(不含空格)的行,以及非ASCII字符的行。
	//原文件名称加.origin;生成的文件与原文件同名
	public static void main(String[] args) throws IOException {

		//找到.bib文件
		File[] bibFiles = new File(".").listFiles(new FileFilter() {
			@Override
			public boolean accept(File pathname) {
				return pathname.isFile() && pathname.getName().endsWith(".bib");
			}
		});

		String[] toDelete = { "citeulike" };//删除以 "citeulike" 开头的行
		boolean deleteNotASCII = true;//删除含非ASCII字符的行,否则ctex读取错误。。。。
		boolean deleteOriginFileIfNoChange = true;//如果生成的文件与原文件相同,则删除原文件
		for (File f : bibFiles) {
			File bak = new File(f.getCanonicalPath() + ".origin");
			if (bak.exists())
				bak.delete();
			boolean b = f.renameTo(bak);//现在备份文件为原文件了!!

			if (!b) {
				JOptionPane.showMessageDialog(null, "文件 " + f.getName()
						+ " 或文件 " + bak.getName() + "可能正被其他程序访问!");
				continue;
			}
			deleteLinesNotASCII_or_StartWith(bak, f, toDelete, deleteNotASCII,
					deleteOriginFileIfNoChange);
		}

	}

	/**
	 * 删除除空格外以toDelete中字符串开头的单词(可选),以及含有非ASCII字符的行(可选)
	 * 
	 * @param originFile
	 *            原文件
	 * @param newFileName
	 *            输出文件
	 * @param toDelete
	 *            删除除空格外以toDelete中字符串开头的单词,toDelete可为null,视为不选该项
	 * @param deleteNotASCII
	 *            是否删除含非ASCII字符的行
	 * @param deleteOriginFileIfNoChange
	 *            当新文件和原文件相同时,是否删除原文件
	 * @throws IOException
	 */
	public static void deleteLinesNotASCII_or_StartWith(File originFile,
			File newFile, String[] toDelete, boolean deleteNotASCII,
			boolean deleteOriginFileIfNoChange) throws IOException {
		BufferedReader bf = new BufferedReader(new FileReader(originFile));
		PrintWriter writer = new PrintWriter(newFile);
		boolean hasChanged = false;
		loop: while (bf.ready()) {
			String line = bf.readLine();
			String lineTrim = line.trim();

			if (toDelete != null)
				for (int i = 0; i < toDelete.length; i++) {//删除除空格外以toDelete中字符串开头的单词
					if (lineTrim.startsWith(toDelete[i])) {
						hasChanged = true;
						continue loop;
					}
				}
			for (int i = 0; i < lineTrim.length(); i++) {//删除该行中含有非ASCII字符的行
				if (lineTrim.charAt(i) > 127) {
					hasChanged = true;
					continue loop;
				}
			}
			writer.println(line);
		}
		bf.close();
		writer.close();
		if (!hasChanged && deleteOriginFileIfNoChange)
			originFile.delete();
	}

}

删除citeulike导出的bib文件中的中文字符,使之能在WinEdt中读取

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
java.io 学习总结 1、读文件: readLine()是BufferedReader类的一个方法,它每次从缓冲里读一行数据
在windows下使用SecureCRT连接hbase或者spark进入shell时,会出现无法删除字符的问题,网上很多说法
 在设计条码标签的时候,偶尔会出现一些很小但很扰人的问题,比如BarTender数据源编码错误这种问题
Eclipse:代码编码格式UTF-8;控制台编码格式GBK; 对“你好”编码解码 Eclipse:代码编码格式UTF-8
一个XML文件,名称就暂定为GroupStudents.xml吧,内容如下: <?xml version="1.0" encoding="utf-8"
  在做javaweb开发的时候,我们可能会需要从本地硬盘上读取某一个文件资源,或者修改某一个文件,
拿到一种元数据,格式为*.mat,但Access打不开,百度也没看到比较好的解决方案。 但是用文本文档可
使用如下方式读取JAR中的文件出错 类路径下放了一个jarfile.jar,如下所示: 如上所示,com/yyy/1.t
(最近在调整生物钟,晚上9点半前睡觉,早晨很早就醒了,利用早晨充足的时间可以读英语和写代码,感
最近想学习数据挖掘,便入门python,在读取文件的时候遇到了UnicodeDecodeError。在此想将自己解决问
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号