2013-08-26 7 views
-3

я есть вход в текстовый файл, например:Perl программирования стоимости хранения столбца на основе другого значения столбца

Time(1ps) *_sysclock *hy_dvdd_0 *y_vdd18_0 *s_enabled *lpi_clk_0 
========== ========== ========== ========== ========== ========== 
1000000000 1   1   1   11   1   
1000000045 1   1   1   11   0   
1000008365 1   1   1   11   1   
1000009824 0   1   1   11   1   
1000016685 0   1   1   11   0   
1000025005 0   1   1   11   1   
1000033325 0   1   1   11   0   
1000035828 1   1   1   11   0   
1000041645 1   1   1   11   1   
1000049965 1   1   1   11   0   
1000058285 1   1   1   11   1   
1000061832 0   1   1   11   1   
1000066605 0   1   1   11   0 

Что я должен сделать здесь: второй колонке указывают на часы края и первой колонке указывают время. Мне нужно измерить тактовую частоту. , так что мое требование, так как этот скрипт принимает первое значение в зависимости от времени, когда я запускаю скрипт, поэтому, когда значение часов изменяется от начального значения, в приведенном выше примере начальное значение равно 1, поэтому, когда оно изменяется на 0 , в это время я хочу сохранить значение столбца 1 в одной переменной, и когда снова значение часов изменится на 1, я хочу сохранить значение столбца 1, чтобы получить длительность тактового импульса.

Основываясь на этом, я хочу сравнить эту временную разницу с некоторым предопределенным значением для ее сравнения.

Можете ли вы помочь мне в решении этого вопроса.

спасибо за все заранее.

Ожидаемое O/P является: Мне нужен выход, который говорит мне разницу между краями .. как в приведенном выше примере: различий между «1000009824», где первые изменения в часы края происходит. и «1000061832», где значение края часов снова равно 0, означает полный тактовый цикл.

+1

Добро пожаловать в SO. Не могли бы вы отредактировать вопрос, чтобы добавить результат, который вы ожидаете от ввода примера, а также добавить код Perl, который вы пробовали до сих пор. Благодарю. –

ответ

1

Предположим, что у вас есть вход на STDIN. Вы можете игнорировать первые две строки:

<> for 1..2; 

Затем, вы можете прочитать в строке данных:

my $line = <>;     #read line from STDIN 
my @initial = split(' ', $line); #split on whitespace 

Вы можете прочитать больше строк, пока вы не увидите изменения:

my @final; 
while ($line = <>) { 
    @final = split(' ', $line); 
    last if $final[1] != $initial[1]; 
} 

И теперь вы можете сравнить временные метки:

my $diff = $final[0] - $initial[0]; 
print "$initial[0] to $final[0] is $diff\n"; 

Я бы рекомендовал прочитать строку в хэш, поэтому у вас есть имена реальных столбцов, а не индексы массивов ... но это зависит от вас.

+0

привет, я попробовал ваш код, что происходит сейчас .. Я получаю вывод как «1000000000 до 1000009824 is 9824» это правильно .. но мое требование состояло в том, чтобы выяснить разницу между временем «1000009824» и «1000061832» в основном импульс синхронизации. –

+0

@ Pankaj Kumar: Rutter предоставил вам все необходимые вам компоненты, но вам не хватает кода для ответа на ваш вопрос - что-то, что обескураживает SO, потому что это не бесплатный сервис решений для кодов, это место для вас * * научиться решать проблемы с кодом. Вы знаете достаточно Perl для написания цикла и дважды повторяете вышеуказанный код (чтобы найти два изменения)? –

+0

@NeilSlater: я очень хорошо знаю, что SO не для бесплатного обслуживания кода. Я постарался изо всех сил, чтобы получить код и его уже сделано. Единственная причина, по которой я спросил Rutter, потому что я думал, что он не понимает мое требование. в любом случае большое спасибо за помощь. –

Смежные вопросы