Как можно сопоставить записи в двух файлах, используя Perl? - PullRequest
1 голос
/ 10 февраля 2011

У меня есть два файла, CUSTOMER_ACCOUNT_LOG.TXT, CUSOMER_ID_LOG.TXT.

Это журнал, ведение метки времени и идентификатора учетной записи, такие же, как в другой метке времени файла и customerid,

просто, я хочу выбрать AccountID и CustomerID с совпавшим TIMESTAMP,

Например, 123456793 это TIMESTAMP, ДЛЯ этого равного совпадения записи ABC0103, CUSTOMER_ID_0103,

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

CUSOMER_ACCOUNT_LOG.TXT

TIMESTAMP| N1| N2 |ACCOUNT ID
-----------------------------------
123456789,111,1000,ABC0101
123456791,112,1001,ABC0102
123456793,113,1002,ABC0103
123456795,114,1003,ABC0104
123456797,115,1004,ABC0105
123456799,116,1005,ABC0106
123456801,117,1006,ABC0107
123456803,118,1007,ABC0108
123456805,119,1008,ABC0109
123456807,120,1009,ABC0110
123456809,121,1010,ABC0111
123456811,122,1011,ABC0112
123456813123,1012,ABC0113
123456815,124,1013,ABC0114
123456817,125,1014,ABC0115
123456819,126,1015,ABC0116
123456821,127,1016,ABC0117
123456823,128,1017,ABC0118
123456825,129,1018,ABC0119
123456827,130,1019,ABC0120
123456829,131,1020,ABC0121

CUSOMER_ID_LOG.TXT

TIMESTAMP| N1| N2 | CUSTOMER ID
-----------------------------------
123456789,111,1000,CUSTOMER_ID_0101
123456791,112,1001,CUSTOMER_ID_0102
123456793,113,1002,CUSTOMER_ID_0103
123456795,114,1003,CUSTOMER_ID_0104
123456797,115,1004,CUSTOMER_ID_0105
123456799,116,1005,CUSTOMER_ID_0106
123456801,117,1006,CUSTOMER_ID_0107
123456803,118,1007,CUSTOMER_ID_0108
123456805,119,1008,CUSTOMER_ID_0109
123456807,120,1009,CUSTOMER_ID_0110
123456809,121,1010,CUSTOMER_ID_0111
123456811,122,1011,CUSTOMER_ID_0112
123456813123,1012,CUSTOMER_ID_0113
123456815,124,1013,CUSTOMER_ID_0114
123456817,125,1014,CUSTOMER_ID_0115
123456819,126,1015,CUSTOMER_ID_0116
123456821,127,1016,CUSTOMER_ID_0117
123456823,128,1017,CUSTOMER_ID_0118
123456825,129,1018,CUSTOMER_ID_0119
123456827,130,1019,CUSTOMER_ID_0120
123456829,131,1020,CUSTOMER_ID_0121

Я программист PHP, и новичок вPerl.

Сначала я прочитал файл, а затем я только что преобразовал массив, теперь мой массив содержит оставшуюся часть требуемой информации о временной отметке, на самом деле, что нужно знать?мы должны прочитать значения файла и файла в массив, поэтому предположим, что ключ массива должен содержать идентификатор учетной записи и значение массива, если временная метка наоборот не уверена, так же, как и в другом файле, наконец, мы должны сравнить временную метку, с которой совпадают временные метки, а затем с учетной записью временных метокid и идентификатор клиента, который мы должны выбрать, насколько мне известно, я заполнил массив, теперь я не знаю, как действовать дальше, потому что здесь следует использовать foreach, а затем нужно сопоставить метки времени файла noth, я застрял здесь!

1 Ответ

9 голосов
/ 10 февраля 2011

Вот шаги, которые я бы предпринял:

0) Несколько элементарных шаблонов Perl (это шаг 0, потому что вы всегда должны всегда делать это, и некоторые люди будут добавлять другие элементы в этот шаблон, ноэто абсолютный минимум):

use strict;
use warnings;
use 5.010;

1) Считать первый файл в хеш, ключи которого - метка времени:

my %account;
open( my $fh1, '<', $file1 ) or die "$!";
while( my $line = <$fh1> ) {
  my @values = split ',', $line;
  $account{$values[0]} = $values[3];
}
close $fh1;

2) Считать второй файл и каждый разВы читаете строку, извлекаете метку времени, затем распечатываете метку времени, идентификатор учетной записи и идентификатор клиента в новый файл.

open( my $out_fh, '>', $outfile ) or die "$!";
open( my $fh2, '<', $file2 ) or die "$!";
while( my $line = <$fh2> ) {
  my @values = split ',', $line;
  say $out_fh join ',', $values[0], $account{$values[0]}, $values[3];
}
close $out_fh;
close $fh2;

Вы не хотите читать весь файл вмассив, потому что это пустая трата памяти.Храните только ту информацию, которая вам нужна, и используйте типы данных Perl, чтобы помочь вам хранить эту информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...