现在有个文件:#Maths##Chinese##English#我现在有一堆数据,比如说成绩,不同科目的成绩我想分类添加到相应行的后面去,格式为#XXX#XXX。添加完之... 现在有个文件:
#Maths#
#Chinese#
#English#

我现在有一堆数据,比如说成绩,不同科目的成绩我想分类添加到相应行的后面去,格式为#XXX#XXX。

添加完之后为:
#Maths#99#89#.....
#Chinese#80#70#...
#English#77#88#....

求指导。。。
成绩获取是有个标志,是数学还是语文还是英语的。
我主要想知道 "类型" 是甚麼 ? 怎样的类型 ? 怎样的结构 ? hash 是怎样的 hash ? 变量是怎样的变量? 内容是甚麼 ? 你只说著只有自己懂的状况, 没人帮到你的
我只是想知道怎么把数据写到文件每一行后面,数据用变量存的,每次获取一个科目和成绩。
"数据用变量存的", 从这句话我只能了解到你不是用纸笔写下来或是用手机拍下来的.. 但我依然不知道这 "变量" 是甚麼, 怎样的结构... ( 笼统点讲, 在编程里所有数据都是变量, 相对的只有 constant )

怎样为之 "每次" , 是每次都读同一个科目, 直到完了再到下一个科目? 还是 数学, 中文, 英文, 数学, 中文, 英文 地循环 ? (可能你最後告诉我"每次"其实是一个人的三个科目 ? )

以你的输入和输出格式而言, "怎么指定写到文件某一行后面" 是没有一个直接的办法能做得到的, 就算你用到最底层的 syswrite() 也做不到

无论如何, 我依然没法想像你的情况.. 要不你再想想该怎麼提问, 要不就能希望有其他人能帮到你了, Good Luck! =)
基本上是perl先运行一个程序,获取到一个成绩和对应的科目,然后我就要把它存到文件对应的行后面,然后再运行同样的程序,再获取,这样子,每次获取到的可能是不一样的科目。
my $score = 90; //90是获取到的
my $type = "CHINESE"; //Chinese也是获取到的。

先谢谢了。
use utf8;

my $subjects={};
my $subFile="有个文件.txt";
my $outFile="添加完.txt";
my $extPerl="一个成绩和对应的科目.pl"; # 假设我从这里会得到一笔资料

sub getHash {
    # 你要在这里给出 $type 和 $score
    return ($type,$score);
}

sub loadSubjects {
    open F, $subFile or die "$! '$subFile'";
    my @data = <F>;        
    chomp @data;
    s/#//g foreach @data;
    $subjects->{$_}=[] foreach @data;
}

sub loadExisted {
    open F, $outFile or die "$! '$outFile'";
    my @data = <F>;
    chomp @data;
    foreach (@data) {
        s/^#(\w+)#(.+)$/$1-$2/;
        my ($sub, $sco) = split /-/, $_, 2;
        my @score = split /#/, $sco;
        @{$subjects->{$sub}}=@score;
    }
}

sub packOutput {
    open F, ">$outFile" or die "$! '$outFile'";
    for(sort keys %$subjects){
        my $write = join "#", @{$subjects->{$_}};
        print F "#$_#$write$/";
    }
}

#main
my $return = `perl "$extPerl"`;
my ($type,$score) = getHash($return);
loadSubjects;
loadExisted if (-e $outFile);
push @{$subjects->{$type}}, $score;
packOutput


下次你最好不要再"基本上"了, 可以是"具体来说"吗 ?

比如:
my $content;
my $file = $curdir."/score.txt";
my $score_type = "CHINESE";
my $score = 99;
if(!-e $file)
{
open(FILE_TABLE,">>$file") or die "cannot open $file\n";
syswrite(FILE_TABLE,"#MATHS\r\n");
syswrite(FILE_TABLE,"#CHINESE\r\n");
syswrite(FILE_TABLE,"#ENGLISH\r\n");
close(FILE_TABLE);
}

open(FILE_R,"<$file") or die "cannot open $file\n";
open(FILE_W,"+<$file") or die "cannot open $file\n";
while(<FILE_R>)
{
chomp $_;
if($score_type eq "MATHS")
{
if(/^#MATHS\s*/)
{
$content .= $_."#".$score."\n";
}
else
{
$content .= $_."\n";
}
}
elsif($score_type eq "CHINESE")
{

if(/^#CHINESE\s*/)
{
$content .= $_."#".$score."\n";
}
else
{
$content .= $_."\n";
}
}
elsif($score_type eq "ENGLISH")
{
if(/^#ENGLISH\s*/)
{
$content .= $_."#".$score."\n";
}
else
{
$content .= $_."\n";
}
}

}
print FILE_W $content;
truncate(FILE_W, tell(FILE_W));
close(FILE_R);
close(FILE_W);