从C脚本调用Perl脚本,对文本文件进行排序
我正在制作一个程序,显示一个菜单,并提供排序文件使用多种不同的语言。目前,我有一段代码,可以接收文本文件,对其进行排序,然后将其输出到新的文本文件:从C脚本调用Perl脚本,对文本文件进行排序,c,perl,sorting,file-io,C,Perl,Sorting,File Io,我正在制作一个程序,显示一个菜单,并提供排序文件使用多种不同的语言。目前,我有一段代码,可以接收文本文件,对其进行排序,然后将其输出到新的文本文件: # include <stdio.h> # include <string.h> #define MAXNAMELEN 100 #define MAXLINELEN 100 #define MAXITEMS 1000 int main(int argc, char ** argv) { FILE * infil
# include <stdio.h>
# include <string.h>
#define MAXNAMELEN 100
#define MAXLINELEN 100
#define MAXITEMS 1000
int main(int argc, char ** argv) {
FILE * infile, * outfile;
// Statically allocated -- dastardly!
char name[MAXNAMELEN];
char line[MAXLINELEN];
char lines[MAXITEMS][MAXLINELEN];
int i, items = 0;
printf("Enter a source filename: ");
fgets(name, sizeof(name), stdin);
name[strlen(name)-1] = '\0'; // strip newline
// No error checking -- ANYWHERE -- dastardly!
infile = fopen(name, "r");
while (fgets(line, sizeof(line), infile)) {
strcpy(lines[items], line);
items++;
}
qsort(lines, items, MAXLINELEN, strcmp);
printf("Enter a destination filename: ");
fgets(name, sizeof(name), stdin);
name[strlen(name)-1] = '\0'; // strip newline
outfile = fopen(name, "w");
for (i=0; i<items; i++) {
fputs(lines[i], outfile);
}
fclose(infile);
fclose(outfile);
}
#包括
#包括
#定义MAXNAMELEN 100
#定义MAXLINELEN 100
#定义MAXITEMS 1000
int main(int argc,字符**argv){
文件*infile,*outfile;
//静态分配——卑鄙!
字符名[MAXNAMELEN];
字符行[MAXLINELEN];
字符行[MAXITEMS][MAXLINELEN];
int i,项目=0;
printf(“输入源文件名:”);
fgets(名称、尺寸(名称)、标准尺寸);
名称[strlen(name)-1]='\0';//带换行符
//没有错误检查--任何地方--卑鄙!
infle=fopen(名称“r”);
而(fgets(线条、尺寸(线条)、填充物)){
strcpy(行[项目],行);
项目++;
}
qsort(线路、项目、MAXLINELEN、strcmp);
printf(“输入目标文件名:”);
fgets(名称、尺寸(名称)、标准尺寸);
名称[strlen(name)-1]='\0';//带换行符
outfile=fopen(名称,“w”);
对于(i=0;i您可以使用popen
管道化进程,然后使用fgets
获取输出:
#include <stdio.h>
#include <stdlib.h>
FILE *popen(const char *command, const char *mode);
int pclose(FILE *stream);
int main(void)
{
FILE *cmd;
char result[1024];
cmd = popen("myperlscript myparams", "r");
if (cmd == NULL) {
perror("popen");
exit(EXIT_FAILURE);
}
while (fgets(result, sizeof(result), cmd)) {
printf("%s", result);
}
pclose(cmd);
return 0;
}
#包括
#包括
文件*popen(const char*命令,const char*模式);
int pclose(文件*流);
内部主(空)
{
文件*cmd;
字符结果[1024];
cmd=popen(“myperlscript myparams”,“r”);
如果(cmd==NULL){
佩罗尔(“波本”);
退出(退出失败);
}
while(fgets(result,sizeof(result),cmd)){
printf(“%s”,结果);
}
pclose(cmd);
返回0;
}
您能解释一下这里发生了什么吗?我正在读取的文件只是一个名字列表。因此,我的排序perl脚本是用popen调用的,它读取该脚本的结果?那么我的perl脚本必须返回/输出排序数组吗?我不清楚将读取什么。是的,从perl脚本打印(到stdout)