小编use*_*517的帖子

有时我的文件冻结在我的vi | vim中,发生了什么?

有时当我使用vi或vim编辑我的文件时,我的文件就会冻结.即使我输入Ctrl+CCtrl+D,它仍然冻结在那里.我kill -9 <pid>从另一个终端,pid被杀死,但文件仍在那里冻结.

我想我必须键入一些我不知道的密钥组合.有人有想法吗?

unix

291
推荐指数
2
解决办法
8万
查看次数

在XML中:TWIG,一旦找到感兴趣的元素,如何停止解析

我只想解析一个感兴趣的xml元素(例如见下面:类名称等于数学的类元素),我想在解析遇到这个条件的第一个元素时停止.(因为只有一个名为math的类,所以一旦找到元素就没有必要继续).

但是,如果我按如下方式实现,代码在找到我感兴趣的元素之后继续读取整个文件(xml文件很长,因此需要很长时间).我的问题是如果解析了name = math的第一个类元素后如何停止它?

my $twig = new XML::Twig(TwigRoots => {"class[\@name='math']" => \&class}); $twig->parsefile( shift @ARGV );

此外,我还希望在解析之后从xml文件(不仅是内存)中删除此类,以便下次解析具有其他名称的类时,不会解析类元素.有可能吗?

perl xml-twig

5
推荐指数
1
解决办法
688
查看次数

如何从哈希元素的引用中获取键

假设$my_ref = \$hash{'mary'}; #my_ref是哈希元素的参考点.
....
稍后,我如何使用它$my_ref来检索它指向的哈希元素的键?即如何从中获取字符串'mary' $my_ref

我问这个问题是因为我有几组用户名列表,一些用户名出现在多个消耗内存的组中.所以我决定创建一个通用的用户名列表,让这些组只存储对相应用户名的引用而不是用户名.

最初,

%group1 = {'mary'=>1, 'luke'=1,'tom'=1,...}  
%group2 = {'mary'=>1, 'sam'=1,'tom'=1,...}
Run Code Online (Sandbox Code Playgroud)

在这里你看到'mary'和'tom'都显示在两者中group1group2消耗内存.(注意我不关心这个例子中的值,这里的值只是因为数据结构是一个哈希值).所以为了减少内存,我希望有一个公共列表存储所有用户名:

%common_hash = {'mary'=>1, 'luke'=1,'tom'=1,'sam'=1...};  
$ref1 = \$common_hash{'mary'};  
$ref2 = \$common_hash{'luke'};  
$ref3 = \$common_hash{'tom'};  
$ref4 = \$common_hash{'sam'};
Run Code Online (Sandbox Code Playgroud)

组仅存储哈希元素的引用:

%group1 = {$ref1=>1, $ref2=1,$ref3=1,...};  
%group2 = {$ref1=>1, $ref4=1,$ref3=1,...}; 
Run Code Online (Sandbox Code Playgroud)

我认为这种方法可以节省大量内存,因为:

  1. 一个用户名一次不存储多次;
  2. groups存储引用(整数)而不是字符串(在我的例子中,每个用户名的长度平均为30个字节,而每个整数只有4个字节(32位sys.)或8个字节(64位sys.)) (顺便说一句,如果一个整数不使用4个字节或8个字节,请纠正我.)
  3. 使用引用我可以立即访问用户名而无需查找.

但是如何从组中获取用户名?

如果我使用@my_ref = keys %group1,我想我会得到'玛丽'的价值,但不是'玛丽'.

$result = $($my_ref[0]);
Run Code Online (Sandbox Code Playgroud)

perl reference hashref

4
推荐指数
1
解决办法
5724
查看次数

在perl.哈希如何在内存中存储数据

我有一个大的xml文件,解析它消耗了大量的内存.
因为我相信大部分是由于文件中有很多用户名.
我将每个用户名的长度从~28个字节更改为10个字节.
并再次运行.但它仍然需要几乎相同的内存量.
到目前为止,xml文件是用SAX解析的,在处理过程中,结果存储在一个哈希结构中,如下所示:
$this->{'date'}->{'school 1'}->{$class}->{$student}...

在减少学生姓名的长度后,为什么记忆仍然如此?是否可以将数据存储在哈希存储器中.无论字符串的长度是多少,都会有很多开销?

perl

4
推荐指数
1
解决办法
2201
查看次数

如何调用指向typedef结构中定义的函数的指针

以下代码有什么问题?
下面的parseCounter1()和parseCounter1()是两个函数.
我把它们的指针放在一起,const OptionValueStruct以便
在option_values []的每个元素
都经过时可以相应地调用它们:

typedef struct OptionValueStruct{  
    char counter_name[OPTION_LINE_SIZE];  
    int* counter_func;  
} OptionValueStruct_t;  

const OptionValueStruct option_values[] = {    
    {"Counter1", (*parseCounter1)(char*, char**)},  
    {"Counter2", (*parseCounter2)(char*, char**)},  
   };  

const OptionValueStruct *option = NULL;

for(int i = 0; i< sizeof(option_values)/sizeof(OptionValueStruct_t); i++){
    option = option_values + i ;  
    result = option->counter_func(opt_name, opt_val);  
}  
Run Code Online (Sandbox Code Playgroud)

c function-pointers

1
推荐指数
1
解决办法
8950
查看次数

如何在perl中使用正则表达式截断字符串

我在文件中有以下字符串,并希望将字符串截断为不超过6个字符.如何在perl中使用正则表达式?
原始文件是:

cat shortstring.in:

<value>1234@google.com</value>
<value>1235@google.com</value>

我想把文件作为:
cat shortstring.out

<value>1234@g</value>
<value>1235@g</value>

我有一个如下代码,有没有比使用更有效的方法
s/<value>(\w\w\w\w\w\w)(.*)/$1/;

这是我的代码的一部分:

    while (<$input_handle>) {                        # take one input line at a time
            chomp;
            if (/(\d+@google.com)/) {
                    s/(<value>\w\w\w\w\w\w)(.*)</value>/$1/;
                    print $output_handle "$_\n";
              } else {
              print $output_handle "$_\n";
            }
    }
Run Code Online (Sandbox Code Playgroud)

regex perl

0
推荐指数
2
解决办法
5203
查看次数

标签 统计

perl ×4

c ×1

function-pointers ×1

hashref ×1

reference ×1

regex ×1

unix ×1

xml-twig ×1