Skip to content

Instantly share code, notes, and snippets.

@am0c
Created March 17, 2011 16:56
Show Gist options
  • Select an option

  • Save am0c/874683 to your computer and use it in GitHub Desktop.

Select an option

Save am0c/874683 to your computer and use it in GitHub Desktop.
네이트온 받은쪽지 파일과 보낸쪽지 파일을 병합
#!/usr/bin/env perl
#
# NateOn 보낸쪽지/받은쪽지 export 한 것을
# 하나로 뭉쳐주는 스크립트.
#
# 스크립트 파일과 입력파일은 UTF-8 가정
#
# 왜 이렇게 작성했는지 따지지 말아주세요.
# 저도 급해서 10분안에 날려 작성한 겁니다.
#
use 5.010;
use warnings;
use strict;
use DateTime;
open my $sendfile, '<', '보낸쪽지.txt' or die;
open my $recvfile, '<', '받은쪽지.txt' or die;
sub readin {
my ($filehandle) = @_;
my $token = 0;
my $tmp = '';
my $date;
my @list = ();
while (my $line = <$filehandle>) {
chomp $line;
$token = 5 if $token == 4;
$token = 1 if $line =~ m{^\-+};
$token = 2 if $line =~ m{^\[\d+/\d+\]};
$token = 3 if $line =~ m{^보낸사람};
$token = 4 if $line =~ m{^받는사람};
if ($token == 3) {
if ($line =~ m{(\d\d\d\d)/(\d\d)/(\d\d) (\d\d):(\d\d):(\d\d)}) {
$date = DateTime->new(
year => $1,
month => $2,
day => $3,
hour => $4,
minute => $5,
second => $6,
time_zone => 'Asia/Seoul',
);
}
else {
die;
}
}
if ($token ~~ [3, 4, 5]) {
$tmp = $tmp . $line . "\n";
}
elsif ($token == 1) {
next unless defined $date;
push @list, { msg => $tmp, date => $date };
$tmp = '';
}
}
return \@list;
}
my @sendlist = @{ readin $sendfile };
my @recvlist = @{ readin $recvfile };
my @alllist = sort { $b->{date} <=> $a->{date} } @recvlist, @sendlist;
for my $msg (@alllist) {
say "-" x 60;
say $msg->{msg};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment