· 9 years ago · Oct 30, 2016, 02:54 AM
1#!/usr/bin/perl -w
2
3use Cwd;
4use DBI;
5use strict;
6
7# variables
8my $curr_dir = getcwd;
9
10# handling arguments
11if (@ARGV != 1){
12 print ("correct usage: \nfsys_to-db [file system directory]\n");
13 exit;
14}
15my $directory = $ARGV[0];
16
17my $database = DBI->connect( "dbi:SQLite:data.dbl" ) || die "Cannot connect: $DBI::errstr";
18$database->do( "CREATE TABLE users ( 'zid', 'full_name', 'profile_pic', 'program', 'birthday', 'email', 'courses', 'mates', 'password', 'home_latitude', 'home_longitude', 'home_suburb' )" );
19$database->do( "CREATE TABLE posts ( 'from', 'message', 'time', 'latitude', 'longtitude' )" );
20$database->do( "CREATE TABLE comments ( 'post_id', 'from', 'time', 'message' )" );
21$database->do( "CREATE TABLE replies ( 'post_id', 'comment_id', 'from', 'time', 'message' )" );
22
23# port all user information from provided sources
24$directory = ($curr_dir . "/" . $directory);
25opendir (DIR, $directory) or die $!;
26my @dir = readdir DIR;
27# for each user
28foreach my $user (@dir) {
29 # user id verification
30 if ($user =~ /z\d{7}/) {
31 # processing user.txt
32 my $filename = "$directory" . "$user" . "/" . "user.txt";
33 my %user_attr = ();
34 open(my $file, '<:encoding(UTF-8)', $filename) or die "Could not open file '$filename' $!";
35 while (my $line = <$file>) {
36 chomp $line;
37 my $attr = $line;
38 $attr =~ s/=.*$//;
39 my $val = $line;
40 $val =~ s/^.*=//;
41 $user_attr{$attr} = $val;
42 #print $attr, "\n";
43 #while( my( $key, $value ) = each %user_attr ){
44 # print "$key: $value\n";
45 #}
46 }
47 if ( ! exists $user_attr{home_suburb} ) {
48 $user_attr{home_suburb} = "NULL";
49 }
50 if ( ! exists $user_attr{home_longtitude} ) {
51 $user_attr{home_longtitude} = "NULL";
52 }
53 if ( ! exists $user_attr{home_latitude} ) {
54 $user_attr{home_latitude} = "NULL";
55 }
56 # profile Picture if its there
57 my $profile_link = "$directory" . "$user" . "/" . "profile.jpg";
58 if ( -e $profile_link) {
59 $user_attr{profile_pic} = $profile_link;
60 } else {
61 $user_attr{profile_pic} = "NULL";
62 }
63
64 # add to user attributes to user table
65 $database->do( "INSERT INTO users VALUES ( '$user_attr{zid}', '$user_attr{full_name}', '$user_attr{profile_pic}', '$user_attr{program}', '$user_attr{birthday}', '$user_attr{email}', '$user_attr{courses}', '$user_attr{mates}', '$user_attr{password}', '$user_attr{home_latitude}', '$user_attr{home_longtitude}', '$user_attr{home_suburb}' ) ");
66
67 # posts
68 opendir (PST, "$directory" . "$user" . "/" . "posts") or die $!;
69 my @dir1 = readdir PST;
70 foreach my $user_post (@dir1) {
71 if ($user_post =~ /\d+/) {
72 my %post_attr = ();
73 my $filename_post = "$directory" . "$user" . "/" . "posts" . "/" . "$user_post" . "/" . "post.txt";
74 #print $filename_post, "\n";
75 #from, message, time, latitude, longtitude
76 open(my $post, '<:encoding(UTF-8)', $filename_post ) or die "Could not open file '$filename' $!";
77 while (my $line = <$post>) {
78 chomp $line;
79 #print $line;
80 my $attr = $line;
81 $attr =~ s/=.*$//;
82 my $val = $line;
83 $val =~ s/^.*=//;
84 $post_attr{$attr} = $val;
85 }
86 if ( ! exists $post_attr{longtitude} ) {
87 $post_attr{longtitude} = "NULL";
88 }
89 if ( ! exists $post_attr{latitude} ) {
90 $post_attr{latitude} = "NULL";
91 }
92 #print ($post_attr{latitude}, "\n");
93 $database->do( "INSERT INTO posts VALUES ( '$post_attr{from}', '$post_attr{message}', '$post_attr{time}', '$post_attr{latitude}', '$post_attr{longtitude}' ) ");
94 }
95 }
96 closedir PST;
97 }
98
99 #print "\n\n\n";
100}
101closedir DIR;
102
103
104
105#my $res = $database->selectall_arrayref( q( SELECT a.lastname, a.firstname, b.title FROM books b, authors a WHERE b.title like '%Orient%' AND a.lastname = b.author ) );
106#foreach( @$res ) {
107# foreach my $i (0..$#$_) {
108# print "$_->[$i] "
109# }
110# print "\n";
111#}
112
113$database->disconnect;