小编Joe*_*oel的帖子

如何在Linux命令行上解析CSV文件?

如何在Linux命令行上解析CSV文件?

做以下事情:

csvparse -c 2,5,6 filename
Run Code Online (Sandbox Code Playgroud)

从所有行中提取第2,5和6列的字段.

它应该能够处理csv文件格式:http://tools.ietf.org/html/rfc4180这意味着引用字段并根据需要转义内部引号,因此对于包含3个字段的示例行:

field1,"field, number ""2"", has inner quotes and a comma",field3
Run Code Online (Sandbox Code Playgroud)

所以,如果我请求上面一行的字段2,我得到:

field, number "2", has inner quotes and a comma
Run Code Online (Sandbox Code Playgroud)

我很欣赏有很多解决方案,Perl,Awk(等)来解决这个问题,但我想要一个本机bash命令行工具,它不需要我调用其他脚本环境或编写任何其他代码(!).

unix linux csv

35
推荐指数
5
解决办法
5万
查看次数

Java Web Start - 流行度

我最近使用了Java Web Start应用程序.我使用我正在查看的页面中的嵌入式jnlp链接从我的Web浏览器启动它.该应用程序已下载,启动并正常工作.它可以访问我的本地文件系统,并在重新启动它之间记住我的偏好.

我想知道的是,为什么Java Web Start应用程序不是Web上复杂应用程序的更流行的交付格式?为什么开发人员经常花费大量时间和精力在html/javascript中复制桌面功能,而使用Java和Java Web Start可以更轻松地提供桌面应用程序的强大功能?

我知道在某些企业环境中,例如银行业,它们是向客户提供复杂交易应用程序的相对流行的方式,但为什么它们不能在整个网络上普及?

(为了便于讨论,让我们假设一个世界:下载源是"可信的"和应用程序是"签名"(即没有安全问题),下载速度快(加载时间快)开发人员知道Java(数量上他们知道html/js/php)).

java jnlp java-web-start

30
推荐指数
4
解决办法
5424
查看次数

用于在字符串中搜索子串的快速算法

我想要一个有效的算法(或库),我可以在Java中使用它来搜索字符串中的子串.

我想做的是:

给定一个输入字符串 - INSTR:

"BCDEFGH"

还有一组候选字符串--CAND:

"AB","CDE","FG","H","IJ"

INSTR中查找匹配为子字符串的任何CAND字符串

在这个例子中,我将匹配"CDE","FG"和"H"(但不是"AB"和"IJ")

可能有数千个候选字符串(在CAND中),但更重要的是,我将进行数百万次搜索,因此我需要它快速.

我想使用char数组.此外,我并不喜欢建筑解决方案,例如分发搜索 - 只是在本地进行搜索的最有效的功能/算法.

另外,CAND和INSTR中的所有字符串都将相对较小(<50个字符) - 即目标字符串INSTR相对于候选字符串不长.


我应该提到的更新,在所有INSTR值中,CAND字符串集是不变的.

更新我只需要知道有匹配 - 我不需要知道匹配是什么.

最终更新 由于实施简单,我选择尝试AhoCorsick和Rabin-Karp.因为我有可变长度模式,所以我使用了一个修改过的Rabin-Karp,它会散列每个模式的前n个字符,其中n是最小模式的长度,N则是我的滚动子字符串搜索窗口的长度.对于Aho Corsick,我用过这个

在我的测试中,我在两篇文档新闻论文中搜索了1000个模式,平均1000次迭代等...标准化时间完成:

AhoCorsick:1

拉宾卡尔普:1.8

天真搜索(检查每个模式并使用string.contains):50


*描述以下答案中提到的算法的一些资源:

http://www.seas.gwu.edu/~simhaweb/cs151/lectures/module5/module5.html

http://www.cs.princeton.edu/courses/archive/spr09/cos226/lectures/18SubstringSearch-2x2.pdf

http://www-igm.univ-mlv.fr/~lecroq/string/index.html*

java string algorithm search

29
推荐指数
3
解决办法
4万
查看次数

推荐快速且可扩展的持久性Map - Java

我需要一个磁盘支持的Map结构才能在Java应用程序中使用.它必须具有以下标准:

  1. 能够存储数百万条记录(甚至数十亿条记录)
  2. 快速查找 - Map上的大多数操作只是查看密钥是否已存在.这和上面的1是最重要的标准.对于经常使用的密钥,应该有一个有效的内存缓存机制.
  3. 持久的,但不需要是事务性的,可以忍受一些失败.即乐意定期与磁盘同步,并且不需要是事务性的.
  4. 能够存储简单的基本类型 - 但我不需要存储序列化对象.
  5. 它不需要分发,即将在一台机器上运行.
  6. 设置简单,免费使用.
  7. 无需关系查询

记录键将是字符串或长整数.如上所述,读取将比写入更频繁,并且大多数读取将仅仅是检查密钥是否存在(即,不需要读取密钥相关数据).每条记录仅更新一次,记录不会被删除.

我目前使用Bdb JE但我正在寻找其他选择.


更新

从那以后,通过减少对二级密钥的依赖性,提高了现有BDB设置的查询性能.有些查询需要在两个辅助密钥上进行连接,并将它们组合成一个复合密钥,我在查找中删除了一个间接级别,这样可以很好地加快速度.

java berkeley-db map persistent berkeley-db-je

26
推荐指数
4
解决办法
2万
查看次数

JPA/Hibernate批量(批量)插入

这是我在阅读了几个关于jpa批量插入的主题后创建的简单示例,我有2个持久对象User和Site.一个用户可以有很多站点,所以我们在这里有一对多的关系.假设我想创建用户并创建/链接几个站点到用户帐户.考虑到我愿意为Site对象使用批量插入,这是代码的样子.

User user = new User("John Doe");

user.getSites().add(new Site("google.com", user));
user.getSites().add(new Site("yahoo.com", user));

EntityTransaction tx = entityManager.getTransaction();
tx.begin();
entityManager.persist(user);
tx.commit();
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此代码(我使用hibernate作为jpa实现提供程序)时,我看到以下sql输出:

Hibernate: insert into User (id, name) values (null, ?)
Hibernate: call identity()
Hibernate: insert into Site (id, url, user_id) values (null, ?, ?)
Hibernate: call identity()
Hibernate: insert into Site (id, url, user_id) values (null, ?, ?)
Hibernate: call identity()
Run Code Online (Sandbox Code Playgroud)

所以,我的意思是"真正的"批量插入不起作用或我感到困惑?

以下是此示例项目的源代码,这是maven项目,因此您只需下载并运行mvn install来检查输出.

更新:

在Ken Liu亲切地建议之后,我已禁用Site对象id自动生成:

    User user = new User("John Doe");
    user.getSites().add(new Site(1, "google.com", user));
    user.getSites().add(new …
Run Code Online (Sandbox Code Playgroud)

java persistence hibernate jpa openjpa

25
推荐指数
3
解决办法
5万
查看次数

生成规范路径

有没有人知道我可以用来生成规范路径的任何Java库(基本上删除反向引用).

我需要做以下事情:

原始路径 - >规范路径

/../foo/       -> /foo
/foo/          -> /foo
/../../../     -> /
/./foo/./      -> /foo
//foo//bar     -> /foo/bar
//foo/../bar   -> /bar
Run Code Online (Sandbox Code Playgroud)

等等...

目前我懒洋洋地依赖于使用:

 new File("/", path).getCanonicalPath();
Run Code Online (Sandbox Code Playgroud)

但是这解决了针对实际文件系统的路径,并且是同步的.

   java.lang.Thread.State: BLOCKED (on object monitor)
        at java.io.ExpiringCache.get(ExpiringCache.java:55)
        - waiting to lock <0x93a0d180> (a java.io.ExpiringCache)
        at java.io.UnixFileSystem.canonicalize(UnixFileSystem.java:137)
        at java.io.File.getCanonicalPath(File.java:559)
Run Code Online (Sandbox Code Playgroud)

在我的文件系统中不存在我规范化的路径,因此只需该方法的逻辑就可以了,因此不需要任何同步.我希望有一个经过良好测试的库,而不是自己编写.

java path

22
推荐指数
3
解决办法
2万
查看次数

识别任意日期字符串

我需要能够识别日期字符串.如果我无法区分月份和日期(例如12/12/10)并不重要,我只需要将字符串分类为日期,而不是将其转换为Date对象.所以,这实际上是一个分类而不是解析问题.

我会有一些文字,例如:

"bla bla bla bla 12 Jan 09 bla bla bla 01/04/10 bla bla bla"

我需要能够识别每个日期字符串的开始和结束边界.

我想知道是否有人知道任何可以做到这一点的java库.到目前为止,我的google-fu还没有提出任何建议.

更新:我需要能够识别出最广泛的表示日期的方法.当然,天真的解决方案可能是为每种可想到的格式编写一个if语句,但是模式识别方法,使用训练有素的模型,理想情况下是我所追求的.

java date classification

22
推荐指数
3
解决办法
1万
查看次数

Java最终局部变量存储在哪里?

请看以下示例:

public void init() {
    final Environment env = new Environment();
    Runtime.getRuntime().addShutdownHook(new Thread() {
        public void run() {
             env.close();
        }
     });
}
Run Code Online (Sandbox Code Playgroud)

首先,env存储在哪里?是吗:

  • 由编译器复制到引用它的内部类的隐藏成员变量中
  • 复制到堆上并在其上引用
  • 留在堆栈上,不知何故在那里引用
  • 别的

我的猜测是第一个选择.

其次,执行这样做会产生任何性能问题(而不是简单地创建env类的成员变量并引用它),特别是如果要创建大量引用最终局部变量的内部类构造.

java performance final local-variables

19
推荐指数
1
解决办法
5328
查看次数

加载网站时IE8崩溃 - res://ieframe.dll/acr_error.htm

当我们的某个用户在IE 8.0.6001.18702中加载首页时,我们的网站崩溃了.

页面短暂加载,然后IE停止加载它并显示错误消息.

地址栏中的URL更改为:

res://ieframe.dll/acr_error.htm#ourwebsite.com,http://demo.ourwebsite.com/login/
Run Code Online (Sandbox Code Playgroud)

在加载facebook.com和barnesandnoble.com这样的网站时,我已经读过IE8的其他用户发生的这种情况.

论坛,如是指可能的修复,如:

unchecking the'Enable third party browser extensions' option in IE 8 advanced option
Run Code Online (Sandbox Code Playgroud)

然而,这对我们来说并不是一个真正的选择,因为该网站最终将成为面向公众的网站.我们需要对IE8试图加载的页面应用修复.

那么,有没有人知道IE8试图加载的页面是什么,可能会导致它这样做?

internet-explorer internet-explorer-8

18
推荐指数
2
解决办法
11万
查看次数

在Selenium RC中模拟TAB按键事件

我需要使用Java API在Selenium RC中模拟tab键.

我输入一些文字后使用以下方法执行此操作:

selenium.type(input, "mytext");
Run Code Online (Sandbox Code Playgroud)

我已经尝试了3种替代方案来使标签工作:

selenium.keyPress(input, "\\9");
Run Code Online (Sandbox Code Playgroud)

和:

selenium.focus(input);
selenium.keyPressNative("09");
Run Code Online (Sandbox Code Playgroud)

乃至:

selenium.getEval("var evt = window.document.createEvent('KeyboardEvent');evt.initKeyEvent ('keypress', true, true, window,0, 0, 0, 0,0, 9,0);window.document.getElementsByTagName('input')[2].dispatchEvent(evt);")
Run Code Online (Sandbox Code Playgroud)

我能得到的最好的是在我的文本后面插入一个"标签空间",所以我在输入字段中结束了这个:

"mytext    "
Run Code Online (Sandbox Code Playgroud)

我真正想要的是选择下一个控件.有线索吗?谢谢!

(注意:我必须使用tab而不能使用焦点或选择我想要去的元素,因为各种原因,所以请不要沿着这些方面提出建议!)

selenium tabs keypress selenium-rc

16
推荐指数
1
解决办法
2万
查看次数