Perl Brown Bag           Datalog Parsing               Shaun Griffith              March 27, 200605/13/12         ATI Conf...
Agenda           •Setting a goal           •Step by step05/13/12                     2
Setting a Goal           What should the output look like?           •Barcode, Package ID, Wafer, Die ID           •Hard B...
…And Another Goal           Retests?             •Print all?             •Keep first?             •Average or aggregate?  ...
…And Even More           •More than 1 input file           •Wildcards in DOS           •Error checking05/13/12            ...
Step by StepProgram Template    •header    •DOS wildcards    •error checking    •main loop    •print loop05/13/12         ...
Template BreakdownHeader    •Perl 5:           •use strict;           •use warnings    •Perl 4: -wWildcards for DOS    •Wh...
Finding DataSplit Arguments:    •Delimiter (match)           • ‘ ‘ (blank) is special (and default)           •like /s+/, ...
Handling DataIs it a barcode line?    •if ( /^barcode=/i )    •{ do_something_here }Fields    •($barcode) = $fields[0] =~ ...
Regular ExpressionsRegex MetacharactersAnchors    •^             start of string if /^.../    •$             end of string...
Regexes…Regex Metacharacters…Character Class    •[abc1-7] match one of “a”, “b”, “c”, or a digit 1 to 7Alternation    •|  ...
Regexes…Regex Metacharacters…Character Class Shortcuts    •swhitespace (blank, tab, newline, carriage return)    •w“word” ...
Handling Data…Is it a wafer line?    •if ( /wafer_ids+=s+(d+)/i )    •{ $wafer = $1; }Is it a die id line?    •if ( /die_i...
Saving DataWhat starts a new device?    •Barcode!    •if (/^barcode=/i)    •{ if ( defined($barcode) )           •{ $data{...
Program so far…05/13/12                     15
Print It Out!Print header line    •print “BARCODE PKGID             WAFER NO. “           •   . ”DIE NO. HWBIN SWBIN LKG01...
Questions?Questions on this material?  • Template  • Command line arguments  • Split  • Matching  • Hashes and unique keys...
Working Session             Running Perl             Perl Debugger05/13/12                     18
Command LineCommon Options    -c             “compile check” – check syntax, but don’t run the program    -w             t...
DebuggerCommon Options    l x-y          list lines x to y    n              single step (over function calls)    s       ...
Upcoming SlideShare
Loading in...5
×

Perl Intro 3 Datalog Parsing

962
-1

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
962
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Perl Intro 3 Datalog Parsing

  1. 1. Perl Brown Bag Datalog Parsing Shaun Griffith March 27, 200605/13/12 ATI Confidential 1
  2. 2. Agenda •Setting a goal •Step by step05/13/12 2
  3. 3. Setting a Goal What should the output look like? •Barcode, Package ID, Wafer, Die ID •Hard Bin, Soft Bin, LKG010, Failing Test05/13/12 3
  4. 4. …And Another Goal Retests? •Print all? •Keep first? •Average or aggregate? •Keep last!05/13/12 4
  5. 5. …And Even More •More than 1 input file •Wildcards in DOS •Error checking05/13/12 5
  6. 6. Step by StepProgram Template •header •DOS wildcards •error checking •main loop •print loop05/13/12 6
  7. 7. Template BreakdownHeader •Perl 5: •use strict; •use warnings •Perl 4: -wWildcards for DOS •Which operating system: $^O •Match to Windows: =~ /win/i •Command line: @ARGV •Expand wildcards: globError checking •Count of items: @ARGV in scalar context05/13/12 7
  8. 8. Finding DataSplit Arguments: •Delimiter (match) • ‘ ‘ (blank) is special (and default) •like /s+/, but no leading null field •Target, default is $_ •Always catch in array •@fields = split;05/13/12 8
  9. 9. Handling DataIs it a barcode line? •if ( /^barcode=/i ) •{ do_something_here }Fields •($barcode) = $fields[0] =~ /=(d+)/; •$pkgid = $fields[1]; •$softbin = $fields[2]; •$hardbin = $fields[3]; •$test_fail = $fields[-1]; •# clear other variables (if needed)05/13/12 9
  10. 10. Regular ExpressionsRegex MetacharactersAnchors •^ start of string if /^.../ •$ end of string if /...$/Quantifiers •? zero or one of preceding •+ one or more of preceding •* any number of preceding •{x,y} at least x, no more than y of preceding •{x} exactly x •{x,} at least x •{,y} no more than y05/13/12 10
  11. 11. Regexes…Regex Metacharacters…Character Class •[abc1-7] match one of “a”, “b”, “c”, or a digit 1 to 7Alternation •| “or” – either the left or right pattern • abc|def either “abc” or “def”Grouping & Captures •(abc) capture “abc” •(abc)+ capture “abc”, at least one must occur •(?:abc)+ “abc” at least once, but don’t capture •(?i) case insensitive flag [ (?-i) to change back ]05/13/12 11
  12. 12. Regexes…Regex Metacharacters…Character Class Shortcuts •swhitespace (blank, tab, newline, carriage return) •w“word” characters, same as [A-Za-z_] •ddigits [0-9]Special Character Shortcuts •ttab •nnewline •xAB hex “AB” •Xescape any special character X05/13/12 12
  13. 13. Handling Data…Is it a wafer line? •if ( /wafer_ids+=s+(d+)/i ) •{ $wafer = $1; }Is it a die id line? •if ( /die_ids+=s+(d+)/I ) •{ $die_id = $1; }Is it a leakage line? •if ( /leakage_all0=(-?d+(.d+))/ ) •{ $lkg_all0 = $1; }05/13/12 13
  14. 14. Saving DataWhat starts a new device? •Barcode! •if (/^barcode=/i) •{ if ( defined($barcode) ) •{ $data{$barcode} = “$barcode $pkgid $wafer $die_id $hardbin $softbin $lkg_all0 $test_fail”; } •($barcode) = $fields[0] =~ /=(d+)/;Use the Barcode as the key •Retests will just overwrite the old data •(This is the easiest case to handle)05/13/12 14
  15. 15. Program so far…05/13/12 15
  16. 16. Print It Out!Print header line •print “BARCODE PKGID WAFER NO. “ • . ”DIE NO. HWBIN SWBIN LKG010 TESTn”; •Note the dot for string concatenationFor loop, Perl style •for my $line (values %data) •{ print “$linen”; }values gets all data out of data, in random orderTo sort by barcode, use sort and keys: •for my $barcode ( sort {$a <=> $b} keys %data) •{ print “$data{$barcode}n”; }05/13/12 16
  17. 17. Questions?Questions on this material? • Template • Command line arguments • Split • Matching • Hashes and unique keysQuestions on anything else?05/13/12 17
  18. 18. Working Session Running Perl Perl Debugger05/13/12 18
  19. 19. Command LineCommon Options -c “compile check” – check syntax, but don’t run the program -w turn on basic warnings (-W for *all* warnings) -d load the debugger (with program or -e) -e ‘code’ run this code -n wraps this around the –e code: while (<>) { code goes here } -p same as –n, but prints $_ after each iteration: while (<>) {code} continue {print $_} -a “autosplit”, used with –p or –n, puts this in the while (<>) loop: @F = split; # whitespace, same as split ‘ ‘ -F/pattern/ used with –a to split on a different pattern -h help summary05/13/12 19
  20. 20. DebuggerCommon Options l x-y list lines x to y n single step (over function calls) s single step (into functions) <enter> repeat last n or s c x continue (execute) to line x b x break on line x b x condition break on line x when condition is true e.g., /barcode/ (same as $_ =~ /barcode/) B x delete breakpoint on line x (or * to delete all breakpoints) p expression print expression, with newline x expression eXamine expression, including nested structure x $scalar or x @array or x %hash h help R Restart program, rewinding all inputs (doesn’t work on DOS)05/13/12 20
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×