Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 删除“;“空白”;或者使用Perl在csv文件中创建错误行。_Sql Server_Perl_Tsql - Fatal编程技术网

Sql server 删除“;“空白”;或者使用Perl在csv文件中创建错误行。

Sql server 删除“;“空白”;或者使用Perl在csv文件中创建错误行。,sql-server,perl,tsql,Sql Server,Perl,Tsql,我正在从事一个项目,该项目从一个非常旧的应用程序(基于DOS的应用程序)导出.csv文件。导出可以工作,但它会截断一列(看起来是随机的),并将其插入下一行。它通常是一个单词的后半部分或类似的东西。我想知道的是,是否有一种方法可以使用Perl删除这些行。我目前使用Perl脚本删除所有逗号分隔符,并用管道(|)分隔符替换它们。我发现使用管道可以更容易地插入到SQL中使用。我对Perl非常、非常陌生,但这段代码非常适合用管道替换逗号。有没有一种方法可以使用它并删除“坏”行。我曾尝试使用大容量插入导入S

我正在从事一个项目,该项目从一个非常旧的应用程序(基于DOS的应用程序)导出.csv文件。导出可以工作,但它会截断一列(看起来是随机的),并将其插入下一行。它通常是一个单词的后半部分或类似的东西。我想知道的是,是否有一种方法可以使用Perl删除这些行。我目前使用Perl脚本删除所有逗号分隔符,并用管道(|)分隔符替换它们。我发现使用管道可以更容易地插入到SQL中使用。我对Perl非常、非常陌生,但这段代码非常适合用管道替换逗号。有没有一种方法可以使用它并删除“坏”行。我曾尝试使用大容量插入导入SQL,但收到诸如“第49行第17列的大容量加载数据转换错误(截断)”之类的错误。我查看了导出,这些错误发生在一个包含所有17行的完整列中,但下一行只是一个| cial)或| 3。我希望我已经说清楚了。谢谢你的帮助

use strict;
use warnings;

use Text::CSV_XS;

my $in_file = "Deal_Log.csv";
my $out_file = "NewDeal.csv";

open my $fh, '<', $in_file or die "$in_file: $!";
open my $out_fh, '>', $out_file or die "$out_file: $!";

my $in_csv = Text::CSV_XS->new;
my $out_csv = Text::CSV_XS->new( { sep_char => '|', eol => "\n" } );

while( my $row = $in_csv->getline( $fh ) ) { 
    $out_csv->print( $out_fh, $row );
}
使用严格;
使用警告;
使用Text::csvxs;
my$in_file=“Deal_Log.csv”;
my$out\u file=“NewDeal.csv”;
打开我的$fh、、$out_文件或死“$out_文件:$!”;
my$in_csv=Text::csv_XS->new;
我的$out_csv=Text::csv_XS->new({sep_char=>'|',eol=>“\n”});
而(my$row=$in_csv->getline($fh)){
$out\u csv->print($out\u fh,$row);
}

不要立即输出该行。相反,读入下一行并检查列数。如果全部有17行,则输出上一行,否则将该行附加到上一行

#!/usr/bin/perl
use warnings;
use strict;

use Text::CSV_XS;

my $in_file  = 'Deal_Log.csv';
my $out_file = 'NewDeal.csv';
my $size     = 17;

open my $fh,     '<', $in_file  or die "$in_file: $!";
open my $out_fh, '>', $out_file or die "$out_file: $!";

my $in_csv  = 'Text::CSV_XS'->new;
my $out_csv = 'Text::CSV_XS'->new( { sep_char => '|',
                                     eol      => "\n",
                                   } );

my $previous = [];
while( my $row = $in_csv->getline($fh) ) {
    if (@$row == $size) {
        $out_csv->print($out_fh, $previous) if @$previous;
        $previous = $row;
    } else {
        $previous->[-1] .= $row->[0];
    }
}
$out_csv->print($out_fh, $previous);  # Do not forget to print the last remembered line.
#/usr/bin/perl
使用警告;
严格使用;
使用Text::csvxs;
我的$in_文件='Deal_Log.csv';
我的$out_文件='NewDeal.csv';
我的$size=17;
打开我的$fh、、$out_文件或死“$out_文件:$!”;
my$in_csv='Text::csv_XS'->新建;
my$out_csv='Text::csv_XS'->new({sep_char=>'|',
eol=>“\n”,
} );
我的$previous=[];
while(my$row=$in_csv->getline($fh)){
如果(@$row==$size){
$out\u csv->如果@$previous,则打印($out\u fh,$previous);
$previous=$row;
}否则{
$previous->[-1]。=$row->[0];
}
}
$out_csv->print($out_fh,$previous);#别忘了打印最后一行。

我最近在Text::csvxs上遇到了类似的问题。几个“随机”行被截断并与下一行合并。在被截断的行中,一些内容实际上丢失了,字段分隔符和行分隔符也丢失了


接受性能惩罚后,我求助于Text::CSV_PP,问题就消失了。如果您的CSV创建不需要时间限制,我建议您尝试Text::CSV\u PP,因为对于大文件,创建速度肯定较慢

你能举个这样做的例子吗?当我说我非常非常不熟悉Perl时,我的意思是我上周才开始使用Perl。但这是一个很好的提示!谢谢你,你就是那个人!到目前为止,这是一个迷人的工作!我感谢你的帮助!