我有一个Perl脚本根据管道分隔的文本文件将数据插入Postgres.有时,字段为空(如预期的那样).但是,Perl将此字段设置为空字符串,并且Postgres插入语句失败.
这是一段代码:
use DBI;
#Connect to the database.
$dbh=DBI->connect('dbi:Pg:dbname=mydb','mydb','mydb',{AutoCommit=>1,RaiseError=>1,PrintError=>1});
#Prepare an insert.
$sth=$dbh->prepare("INSERT INTO mytable (field0,field1) SELECT ?,?");
while (<>){
#Remove the whitespace
chomp;
#Parse the fields.
@field=split(/\|/,$_);
print "$_\n";
#Do the insert.
$sth->execute($field[0],$field[1]);
}
Run Code Online (Sandbox Code Playgroud)
如果输入是:
a|1 b| c|3
编辑:改为使用此输入.
a|1|x b||x c|3|x
它会失败的b|.
DBD::Pg::st execute failed: ERROR: invalid input syntax for integer: ""
我只是想让它在field1上插入一个null.有任何想法吗?
编辑:我在最后一分钟简化了输入.旧的输入实际上由于某种原因使它工作.所以现在我将输入改为使程序失败的东西.另请注意,field1是可以为null的整数数据类型.
我在Emacs中有两个操作:
在进行前两个操作时,我感觉自己像个键盘杂技演员.我认为值得尝试一些自定义键绑定和宏.
关于此定制的一些问题:
我真正想做的就是确保管道中的所有内容都成功并将最后一个标准输入分配给变量。考虑以下简化的场景:
x=`exit 1|cat`
当我跑步时declare -a,我看到这个:
declare -a PIPESTATUS='([0]="0")'
我需要某种方法来注意到exit 1,所以我将其转换为:
exit 1|cat|xargs -I {} x={}
并declare -a给了我:
declare -a PIPESTATUS='([0]="1" [1]="0" [2]="0")'
这就是我想要的,所以我尝试看看如果exit 1没有发生会发生什么:
echo 1|cat|xargs -I {} x={}
但它失败了:
xargs: x={}: No such file or directory
有没有办法让 xargs 分配{}给x?PIPESTATUS其他工作并将标准输入分配给变量的方法怎么样?
注意:这些例子是简化的。我并没有真正执行exit 1或echo 1a cat,而是使用这些命令进行简化,以便我们可以专注于我的特定问题。
我经常有shell脚本调用其他脚本语言,如下所示:
#!/bin/bash
cat somefile|awk '
BEGIN
{
#This line is not auto-indented and is colored as a string constant.
...
}
{
#Same with this line.
...
}'
echo "More Bash code here."
...
有没有办法让Emacs将awk字符串识别为awk程序而不仅仅是字符串常量?
我使用emacs编辑几个不同服务器上的脚本和代码文件.TRAMP工作得非常好.但是,当我退出emacs时,我的所有tramp连接都会消失.我尝试了桌面保存模式,但是当我重新启动emacs时只显示本地文件.是否有一些包将记住tramp连接?这只是一个配置问题吗?
我想以更快的播放速度观看YouTube上的视频.前一阵子我问是否有一个可以加速视频播放的实用工具.唯一提到的是Windows的一个闭源项目.我不是Windows或封闭源的粉丝.
另一个答案提到您可以从YouTube下载视频并播放它们.不幸的是,这似乎不再起作用.我尝试了几个Firefox插件,但都无法下载.所以,现在我觉得我需要自己构建一些东西.我看到两个选择:
我不确定是否有任何一个选项可以给我控制我想要的.我没有很多关于flash的经验,并且希望有经验的人可以提供从哪里开始的建议.
我在 emacs 中经常使用 TRAMP。然而,有时服务器宕机,流浪汉坐在那里等待超时。通常是C-x-f在以 ido 模式打开一个新文件之后。我必须等待令人讨厌的很长时间。有没有一种简单的方法可以告诉 TRAMP 超时并让 ido-mode 继续。我尝试C-g打开文件的选项从未发生过。
在Java中处理大字符串常量的最佳方法是什么?
想象一下,我有一个SOAP的测试夹具,我想发送以下字符串:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<QuoteRequest xmlns="https://www.bcponline.co.uk">
<header>
<SourceCode>BN325</SourceCode>
<MessageSource>B2B3</MessageSource>
<Profile>B08A</Profile>
<Password>AP3U86V</Password>
<OperatorID>flightline</OperatorID>
<ShowWebOptions>0</ShowWebOptions>
</header>
<serviceSelection>
<ServiceProviderCode></ServiceProviderCode>
<ProductCode>CarParking</ProductCode>
<IATACode>lgw</IATACode>
</serviceSelection>
<quoteDetails>
<DepartureDate>21-Jun-2005</DepartureDate>
<DepartureTime>07:00</DepartureTime>
<ReturnDate>28-Jun-2005</ReturnDate>
<ReturnTime>07:00</ReturnTime>
<QuoteReference></QuoteReference>
<NoPax>1</NoPax>
</quoteDetails>
<sPostCode></sPostCode>
</QuoteRequest>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
我宁愿不在每一行都加上引号和加号.如果我把它放在一个文件中它是额外的代码,并且在同一个文件中放置几个字符串会有些困难.XML在转义文本时遇到问题(我必须使用CDATA丑陋).有没有更简单的方法?
如今,许多经济型笔记本电脑的分辨率为800线或更低.我知道您可以插入外部显示器,但有时这不是一个选项(例如前往客户端站点).我习惯于使用两台巨大的显示器进行开发,并且在尝试使用笔记本电脑进行编码时感觉完全瘫痪.
所以,我的主要问题是这些低分辨率机器上的Eclipse用户.在Eclipse中,您使用哪些应对策略作为高效的编码器?例如,我注意到双击选项卡会全屏打开(这有利有弊).我可以按ctrl-shift-t弹出一个对话框来查找一个类(所以我不必在我的所有包中搜索它).我敢肯定,在笔记本电脑上使用多年Eclipse编码的人有一些他们觉得有用的技巧.如果你这样做,请在这里分享给大家.
谢谢
我有一个使用几个"模块"的"主项目".这些模块位于pom.xml中,但我也将模块的代码作为Eclipse中的项目.我在"属性|项目引用"和"属性| Java构建路径"中将模块定义为项目依赖项.我还确保所有Eclipse项目都位于Java Build Path中的"Order and Export"的顶部.
主项目无法识别eclipse中模块的更改.当我按F3查看代码时,它会从我的.m2目录中打开java源代码.这显然忽略了我的Eclipse项目.我错过了一些设置吗?我该怎么办?