希望大家帮我看下这段perl代码

xuanmumumu 2010-04-26 11:36:16
# This program is to convert CSV format to SVMlight format data set
#!perl -w inputCSV outputSVML

use strict;
die "Usage: command in_set outputfile\n" if scalar(@ARGV) < 2;
my ($inputfile, $out_file ) = @ARGV;

my $line_num = 0;
my $counterp = 0;
my $countern = 0;
my $counter = 0;

open(IN, $inputfile) || die(" Can not open file(\"$inputfile\").\n");
open(OUT, "> $out_file") || die(" Can not open file(\"$out_file\").\n");

$line_num = 0;
while (<IN>)
{
chomp;
my $per_line = $_;
my @items = split(',', $per_line);

my $flag = $items[$#items];
if ($flag != 1) {
print OUT "-1";
$countern = $countern + 1;
}
else {
print OUT "1";
$counterp = $counterp + 1;
}

for($counter = 0 ; $counter < $#items ; $counter++)
{
my $temp = $counter + 1;
print OUT " $temp:$items[$counter]";
}
print OUT "\n";
$line_num = $line_num +1;
}

print "\n $line_num lines; pos: $counterp + rand: $countern \n\n";
close(IN);
close(OUT);


在matlab中执行:
cv_cmd = sprintf('!perl ../trainTest/convert_file_forSvm.pl %s %s > %s', testCSVfile, temp_test_file, garbage_file);
eval(cv_cmd);
出错,希望大家看看帮我解决一下!
谢谢!
...全文
134 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
fox000002 2010-04-26
  • 打赏
  • 举报
回复
错误信息是什么???
fox000002 2010-04-26
  • 打赏
  • 举报
回复
可以输出 cv_cmd 的内容来看看对不对
xuanmumumu 2010-04-26
  • 打赏
  • 举报
回复
呵呵 就是执行到函数eval时,它出错,这个你知道吗?
fox000002 2010-04-26
  • 打赏
  • 举报
回复
看不明白 lz 的意思了

要么直接用 matlab 内置的 perl 命令

要么调用外部的 perl 解释器执行脚本

两者选其一
xuanmumumu 2010-04-26
  • 打赏
  • 举报
回复
真是辛苦你了!很感谢!O(∩_∩)O~ perl这里可以运行通过了

有个问题是
cmd=perl ('d:/trainTest/convert_file_forSvm.pl','d:/temp.test.csv','d:/svmlight');
cv_cmd = sprintf('!%s %s %s > %s', cmd,testCSVfile, temp_test_file, garbage_file);
eval(cv_cmd);
运行到这里时它有这样的错误:
Error: Unexpected MATLAB expression.

Error in ==> complexTestOneCluster at 50
eval(cv_cmd);
谢谢你继续帮我解答!thank you!
fox000002 2010-04-26
  • 打赏
  • 举报
回复
专门实践了一下

添加 PATH 后,matlab 可以执行 perl 命令

不知提示的错误是什么??

另:发现 matlab 自己就带了一个 perl 解释器

可以直接把自带 perl 解释器的目录加到 PATH 里
xuanmumumu 2010-04-26
  • 打赏
  • 举报
回复
我尝试在cmd下输入perl -version
它有显示This is per 5,version 12,subversion 0 <v5.12.0> bulit for MSWin32-x86-multi-thread
...
这应该是已经设置好吧?
还是在执行在matlab中:
cv_cmd = sprintf('!perl ../trainTest/convert_file_forSvm.pl %s %s > %s', testCSVfile, temp_test_file, garbage_file);
eval(cv_cmd);
有错误发生。

many thanks!
fox000002 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xuanmumumu 的回复:]

请问一下matlab中的调用有什么问题没?
谢谢!
[/Quote]

把 PATH 打印出来看看

或者在 cmd 中执行 perl 看能不能执行
xuanmumumu 2010-04-26
  • 打赏
  • 举报
回复
请问一下matlab中的调用有什么问题没?
谢谢!
xuanmumumu 2010-04-26
  • 打赏
  • 举报
回复
还是存在原来的问题。
我设置了环境变量path了
fox000002 2010-04-26
  • 打赏
  • 举报
回复
可以安装 ActivePerl
xuanmumumu 2010-04-26
  • 打赏
  • 举报
回复
我的系统是windoes xp
应该装的是什么版本的perl解释器?
十分感谢你!
fox000002 2010-04-26
  • 打赏
  • 举报
回复
matlab 是调用外部的 perl 解释器来执行 perl 脚本的

所以必须在系统上安装 perl 解释器

perl 脚本的输入参数就是执行脚本时写在脚本文件名之后的命令行参数
xuanmumumu 2010-04-26
  • 打赏
  • 举报
回复
因为这是第一次接触perl,有很多不清楚的,非常感谢大家帮忙!
我还有一点不是很清楚,就是在matlab里是可以直接执行perl脚本还是必须安装perl?
另外,我想问下上面的perl代码中它的输入参数该是怎么输入的?
柯本 2010-04-26
  • 打赏
  • 举报
回复
你在什么系统平台下?
如果是linux,应该是问题的,因为它缺省安装有perl,且已设好路径
如果是windows,首先你要确认你系统安装了perl,如果安装了perl,要将perl的执行路径加入你的PATH
或在程序中加入它的全路径:
cv_cmd = sprintf('!c:\\perl\\bin\\perl ...
fox000002 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xuanmumumu 的回复:]

你指的是pl文件的目录吗?
在运行的时候我给出了完整的文件路径。
还是指的是?
谢谢你的回答
[/Quote]

perl.exe 这个的全路径

或者把 perl.exe 的路径加到 PATH 里
xuanmumumu 2010-04-26
  • 打赏
  • 举报
回复
你指的是pl文件的目录吗?
在运行的时候我给出了完整的文件路径。
还是指的是?
谢谢你的回答
赵4老师 2010-04-26
  • 打赏
  • 举报
回复
转Perl论坛
fox000002 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xuanmumumu 的回复:]

'perl' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
[/Quote]


这个需要设置 PATH

或者用 perl 的完整路径
xuanmumumu 2010-04-26
  • 打赏
  • 举报
回复
'perl' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧