Aşağıdaki içeriğe sahip bir metin dosyam var ve perl ile bir dizi veya başka bir veri yapısında iç içe geçmiş işlevleri (rootfunc dahil) ayıklamak istiyorum.iç içe geçmiş işlevleri ve parametreleri almak (metin :: dengeli veya düz perl)
GİRİŞ DOSYA İÇERİĞİ:
rootfunc aaa with string1 {
blah blah
subfunc bbb (different parameters) {
blah blah
}
subfunc others_in_aaa (different parameters) {
blah blah
}
}
rootfunc ccc with string2 {
blah blah
if (blah) {
blah blah
} else {
blah blah
}
subfunc others_in_ccc (different parameters) {
blah blah
}
}
rootfunc others with stringothers {
blah blah
subfunc others_in_others (different parameters) {
blah blah
}
}
Bütün rootfunc ayıklamak ve benzeri aşağıda çıkışı ile subfunc istiyorum:
AMACI ÇIKIŞ DOSYA (değil,/else da atılacaktır ise) :
sadece rootfunc arasında parantez içinde ne varsa ayıklamak ve ardından subfunc ne varsa alabilirsiniz aşağıdaki gibi perl script ilerootfunc aaa with string1 {
subfunc bbb (different parameters) {
}
subfunc others_in_aaa (different parameters) {
}
}
rootfunc ccc with string2 {
subfunc others_in_ccc (different parameters) {
}
}
rootfunc others with stringothers {
subfunc others_in_others (different parameters) {
}
}
ama rootfunc ad/parametreler ve subfunc ad/parametreler kaybolur:
PERL script:
use Text::Balanced qw(extract_multiple extract_bracketed);
open(FILE, "/tmp/a") || die "Unable to open /tmp/a: $!\n";
{
local $/=undef;
my $file = <FILE>;
}
close(FILE);
my @array = extract_multiple($file, [sub{extract_bracketed($_[0], '{}')},], undef, 1);
istenilen çıktıyı almak için herhangi bir yöntem var mı? Teşekkürler,
Eğer tüm ikinci düzey parantez içeriğini kaldırılmasını istiyorum söylemek doğru olur mu? – Borodin
@Borodin Kaldırılması gereken bazı şeyler de birinci seviyede. – laune
Ben de ilk seviye içeriği (adı) istiyorum ... Sadece bazı blahs kaldırılacak –