我有一个名为Jobs.conf的文件,其中包含:
/**
* @ORM\Entity
* @ORM\Table(name="equips")
*/
class Equip{
/**
* @ORM\Column(type="string",length=30)
* @ORM\Id
*/
protected $nom;
/**
* @ORM\Column(type="integer")
*/
protected $punts_lliga;
/**
* @ORM\Column(type="integer")
*/
protected $num_jugadors;
/**
* @ORM\OneToOne(targetEntity="Estadi",inversedBy="nom")
* @ORM\JoinColumn(name="nom_estadi",referencedColumnName="nom",onDelete="SET NULL")
*/
protected $estadi;
/**
* @ORM\OneToOne(targetEntity="Entrenador",inversedBy="nom")
* @ORM\JoinColumn(name="nom_entrenador",referencedColumnName="nom",onDelete="SET NULL")
*/
protected $entrenador;
/**
* @ORM\ManyToOne(targetEntity="Lliga",inversedBy="equips")
* @ORM\JoinColumn(name="nom_lliga",referencedColumnName="nom",onDelete="SET NULL")
*/
protected $lliga;
/**
* @ORM\OneToMany(targetEntity="Jugador",mappedBy="nom_equip")
*/
protected $jugadors;
public function __construct(){
$this->jugadors = new ArrayCollection();
}
}
是否可以读取此文件,以便每个Job存储在一个数组中,然后将4个数组存储在一个哈希中?将它存储为散列的散列会更有意义吗?这是可能的吗?
答案 0 :(得分:3)
关键是要正确设置$/
(input record separator):
这会影响Perl关于" line"是。像awk的RS一样工作 变量,包括将空行作为终止符处理,如果设置为 null字符串(空行不能包含任何空格或制表符)。你可以 将其设置为多字符字符串以匹配多字符 终结符,或
undef
来读取文件末尾。设置它 到"\n\n"
意味着与设置为""
略有不同, 如果文件包含连续的空行。设置为""
将 将两个或多个连续的空行视为一个空行。 设置为"\n\n"
将盲目地假设下一个输入字符 属于下一段,即使它是换行符。
然后我们只是利用split
如何将记录直接放入哈希引用:
use strict;
use warnings;
use Data::Dump;
local $/ = "";
my @jobs;
while (<DATA>) {
push(@jobs, {split(/:\s*|\n/)});
}
dd(\@jobs);
__DATA__
JobName: A
JobSize: 100
JobArrival:1
JobExe:100
JobName: B
JobSize: 100
JobArrival:2
JobExe:100
JobName: C
JobSize: 100
JobArrival:3
JobExe:100
JobName: D
JobSize: 100
JobArrival:4
JobExe:100
或者只是:
my @jobs = map { {split(/:\s*|\n/)} } <DATA>;
输出:
[
{ JobArrival => 1, JobExe => 100, JobName => "A", JobSize => 100 },
{ JobArrival => 2, JobExe => 100, JobName => "B", JobSize => 100 },
{ JobArrival => 3, JobExe => 100, JobName => "C", JobSize => 100 },
{ JobArrival => 4, JobExe => 100, JobName => "D", JobSize => 100 },
]
哈希数组(上一个示例)将是我的偏好,但如果您想要哈希哈希,则需要稍微修改代码:
my %jobs;
while (<DATA>) {
my %temp = split(/:\s*|\n/);
$jobs{delete($temp{JobName})} = \%temp;
}
dd(\%jobs);
输出:
{
A => { JobArrival => 1, JobExe => 100, JobSize => 100 },
B => { JobArrival => 2, JobExe => 100, JobSize => 100 },
C => { JobArrival => 3, JobExe => 100, JobSize => 100 },
D => { JobArrival => 4, JobExe => 100, JobSize => 100 },
}