- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 CSV 文件,其中一些字段被引用,无论它们是否需要。我想要做的是加载此文件,修改一些值,并生成修改后的 CSV,其中引用的字段保持不变。
我目前正在使用 Perl 的 Text::CSV包试图解决这个问题,但遇到了一些障碍。以下是演示问题的小测试脚本:
use Text::CSV;
my $csv = Text::CSV->new ({'binary' => 1, 'allow_loose_quotes' => 1, 'keep_meta_info' => 1});
my $line = q^hello,"world"^;
print qq^input: $line\n^;
$csv->parse($line);
my @flds = $csv->fields();
$csv->combine(@flds);
print 'output: ', $csv->string(), "\n";
产生:
input: hello,"world"
output: hello,world
根据 Text::CSV 的文档,一个 is_quoted()存在函数来测试输入中是否引用了某个字段,但如果我使用它向字段添加周围的引号,我会得到意想不到的结果:
my $csv = Text::CSV->new ({'binary' => 1, 'allow_loose_quotes' => 1, 'keep_meta_info' => 1});
my $line = q^hello,"world"^;
print qq^input: $line\n^;
$csv->parse($line);
my @flds = $csv->fields();
for my $idx (0..$#flds) {
if ($csv->is_quoted($idx)) {
$flds[$idx] = qq^"$flds[$idx]"^;
}
}
$csv->combine(@flds);
print 'output: ', $csv->string(), "\n";
制作:
input: hello,"world"
output: hello,"""world"""
我相信我在 combine()
之前添加的引号被视为该字段的一部分,因此被第二个双引号转义为 combine()
正在处理中。
确保引用字段从输入到输出完好无损的最佳方法是什么?我不确定应用程序是否会接受 always_quote
编辑的字段...是否存在允许保持引号完整的 Text::CSV 对象属性的某种组合?或者也许我只剩下在 combine
后调整记录?
最佳答案
很遗憾,虽然 keep_meta_info
允许您访问元数据,但没有选项告诉 Text::CSV
重新应用 is_quoted
输出状态。
根据您的唱片的复杂程度,您可以自己重新组装。但是随后您将不得不应对字符串字段的更改,这些字段以前是安全地不加引号的,但在您处理之后现在需要引号。这将取决于您引入的更改类型,即您是否曾期望以前“安全”的字符串值会变得不安全。如果答案是“从不”(即 0.00000% 的可能性),那么您应该自己重新组装并记录您所做的事情。
后处理将要求您对字符串进行 CSV 解析以处理字符串中逗号和其他不安全字符的可能性,因此这可能不是一个选项。
或者,您可以深入研究 Text::CSV
的代码并实现所需的功能。 IE。允许用户在输出中强制引用特定字段。我试了一下,看起来所需机制的一部分可能已经到位,但不幸的是,我只能访问 XS 版本,它委托(delegate)给 native 代码,所以我现在无法深入研究。据我所知:
原始组合
方法。请注意将 _FFLAGS
设置为 undef
。
sub combine
{
my $self = shift;
my $str = "";
$self->{_FIELDS} = \@_;
$self->{_FFLAGS} = undef;
$self->{_STATUS} = (@_ > 0) && $self->Combine (\$str, \@_, 0);
$self->{_STRING} = \$str;
$self->{_STATUS};
} # combine
我的尝试。我猜 Combine
的第二个参数可能是标志,但由于(小写)combine
API 是基于接收数组而不是 arrayref,所以没有办法传入两个数组。我将其更改为期望有两个数组引用,并尝试将第二个数组传递给 Combine
,但失败了 “无法在未祝福的引用上调用方法“print”” .
sub combine2
{
my $self = shift;
my $str = "";
my $f = shift;
my $g = shift;
$self->{_FIELDS} = $f;
$self->{_FFLAGS} = $g;
$self->{_STATUS} = (@$f > 0) && $self->Combine (\$str, $f, $g);
$self->{_STRING} = \$str;
$self->{_STATUS};
} # combine
关于perl - 保留输入中引用的 CSV 字段的引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26569459/
我有一个类似 ( www.bbcurdu.com) 的网站。现在我的问题是,当我添加一个带有引号或引号的新故事时,它不会保存在数据库中。如果我删除这些逗号或引号,那么它将保存在数据库中。并正确获取和显
我正在使用(并坚持使用)以下版本的 Ruby: ruby 1.8.7 (2012-06-29 patchlevel 370) [x86_64-linux] 我尝试了很多谷歌搜索,但找不到解决我的问题的
我有以下示例数据, 我想连接 string1 和 string2 以产生连接结果 "a""b" 使用连接函数 我在官方的microsoft excel文档中没有找到任何答案 https://suppo
我是 SQL-mySQL 方面的 super 新手,我想查询这些包含具有特定值的列的条目,但该值中已经有引号,它实际上看起来像这样,引号已经存在:“荷兰鹿特丹 Voor Land-en Volkenk
是否有一个简单的正则表达式来匹配所有 unicode 引号?还是必须像这样手动编码: quotes = ur"[\"'\u2018\u2019\u201c\u201d]" 感谢阅读。 布莱恩 最佳答案
我有下面的代码,禁止将特殊字符插入到 HTML 表单上提交的文本中。 可以看出,我需要禁用的特殊字符位于引号之间,而我需要禁用引号 " 本身,但我不能这样做,因为如果我添加另一个中间的引号然后读起来就
对于给定的输入字符串 abc,[def,ghi,ijk],lm,(no,pq,rs),[tu,vw,xy],zs,"as,as,fr"输出应该是 abc [def,ghi,ijk] lm (no,pq
下午好,快乐 4 我在处理一些 javascript 时遇到了问题....我是一个初学者,正在使用这个特定的在线示例来了解如何淡入和淡出多个引号... 我已经实现了 HTML/Javascript/C
我想在一段文本周围加上引号。文本不能超过 3 行:如果超过,我想要一个省略号(并且我仍然想要引号)。我附上我现在拥有的东西。我的解决方案使用 JS:虽然纯 CSS 解决方案是理想的,但可能的 CSS
我将它发送给一个函数,我想在下面的变量值周围加上双引号,例如 $var = "New York"(注意引号) $fq.=" + area:$state"; 所以当我回显 $state 时我想用双
这个问题在这里已经有了答案: How can I make Java print quotes, like "Hello"? (11 个答案) 关闭 9 年前。 我想在 java 中打印反引号。但是
我认为这是 F# 的一个众所周知的限制,但我找不到任何好的解决方法…… 所以,这里是代码(我试图让它尽可能简单,所以它可能看起来没有任何意义): [] type Human (makeAName: u
我在Windows 7上,在Apache 2.4上使用PHP 5.6.14版:我必须使用PHP在SQLite3数据库上构建查询选择。 NOTA:我是PHP的再见..... 我的代码如下 '; echo
在 jQuery 文档中,大多数字符串都是使用单引号“声明”的。包括documentation用于 jQuery UI。 那为什么不呢 $(".datepicker").datepicker({ da
我正在尝试在 Java 中使用以下正则表达式,它应该与任何 lang="2-char-lang-name" 匹配: String lang = "lang=\"" + L.detectLang(inp
我试图在 more 之后插入一个 block 引用指令,不接受任何参数: First paragraph. .. more:: Blockquote here! -- Author S
我从外部进程获得了一些我无法更改的 JSON,并且我需要修改此 JSON 字符串才能使下游 Java 进程正常工作。 JSON 字符串如下所示: {"widgets":"blah","is_dog":
我试图在从数据库读取数据后生成 CSV 文件。现在单个数据可以包含逗号、单引号和双引号。 请告诉我如何在正则表达式的帮助下处理这种情况。 最佳答案 您可以为 CSV 文件使用不同的分隔符吗?也许是一个
我尝试在 codemodel(Sun) 中创建下一个表达式: driver.findElement(By.xpath("//div[text()=\""+whatToclick+"\"]/pare
我需要知道报价和列表之间的区别。例如: cl-prompt> (equal (first (list * 1 2)) *) T cl-prompt> (equal (first '(* 1 2)) *
我是一名优秀的程序员,十分优秀!