Raven - Example Scripts
MySQL Data ImportEach year I have to import new student details into a custom web app I maintain for a school. Data is supplied as a TAB delimited text file with a single record per line. Nothing complicated, but a drag to do by hand. This script parses the file and inserts into a users table in MySQL.
#!/usr/local/bin/raven # comment to run! bye # get input file ARGS 2 get as $infile $infile NULL = if 'missing input file' print bye # pull in student data, removing title row $infile read LF split as $kids $kids shift as $titles # all dates must be the same, so do this outside the loop time '%Y-%m-%d %H:%M:%S' date as $today # somewhere to save the new data with passwords attached new list as $out # connect to the database 'mysql://username:password@localhost/dbname' open as mysql # insert each student $kids each as $kid # source data was tab delimited text $kid "\t" split into $id , $name , $handle , $email # build an 8 character random password 8 each as $i 26 choose 'a' ord + "%c%c%c%c%c%c%c%c" as $pass # clean up the handle $handle r/[^a-z.]/_/g as $ok_handle # build and escape data set. # note that we copy the hash before escaping. this protects # the original variables. group 'name' $name 'handle' $ok_handle 'email' $email 'regdate' $today 'password' $pass md5 hash copy mysql escape as $data # insert data set $data keys '`,`' join as $fields $data "','" join as $values "INSERT INTO users (`%($fields)s`) VALUES ('%($values)s')" mysql query as $rs # output a line to reflect data changes [ $name $ok_handle $email $pass ] "\t" join $out push # build a tab delimited text file for updated data $out LF join 'students_2006_done.txt' write # disconnect from database, not strictly required mysql close
|