<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: parser code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Fri, 16 May 2008 00:38:22 GMT</pubDate>
    <description>DZone Snippets: parser code</description>
    <item>
      <title>ARGV Parser</title>
      <link>http://snippets.dzone.com/posts/show/5099</link>
      <description>This function parse ARGV and return a string.&lt;br /&gt;See exemples for more informations :&lt;br /&gt;&lt;br /&gt;// Go : http://blackh.badfile.net/wordz/&lt;br /&gt;&lt;br /&gt;Function :&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  def options(param)&lt;br /&gt;  &lt;br /&gt;	i = 0&lt;br /&gt;		ARGV.each  { |valeur|&lt;br /&gt;		&lt;br /&gt;    		if (valeur == '-' + param.to_s)&lt;br /&gt;				return ARGV[i+1]&lt;br /&gt;			elseif (valeur != '-' + param.to_s)&lt;br /&gt;				return false&lt;br /&gt;			end&lt;br /&gt;		i += 1&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;   end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Usage :&lt;br /&gt;&lt;br /&gt;// cmd&gt; ruby test.rb -o foo&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;	out =  self.options('o')&lt;br /&gt;&lt;br /&gt;	if (out != false and out.empty? == false)&lt;br /&gt;                   puts out # print -&gt; foo&lt;br /&gt;	end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 03 Feb 2008 20:24:59 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5099</guid>
      <author>Black_H (Black_H)</author>
    </item>
    <item>
      <title>Regex-based parsing technique</title>
      <link>http://snippets.dzone.com/posts/show/4852</link>
      <description>&lt;code&gt;&lt;br /&gt;&lt;br /&gt;#!/usr/local/bin/ruby -w&lt;br /&gt;&lt;br /&gt;# Regular expressions and strings with embedded objects&lt;br /&gt;# From: http://t-a-w.blogspot.com/2007/06/regular-expressions-and-strings-with.html&lt;br /&gt;# Author: Tomasz W&#281;grzanowski&lt;br /&gt;# License: &lt;br /&gt;# Creative Commons License, http://creativecommons.org/licenses/by-sa/3.0/&lt;br /&gt;# GNU Free Documentation License, http://en.wikipedia.org/wiki/GNU_Free_Documentation_License&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def hash_or_die(kw)&lt;br /&gt;  Hash.new{|ht,k| raise "Unknown key: #{k}"}.merge(kw)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def parse(data)&lt;br /&gt;  esc = hash_or_die "\\" =&gt; "A", "\"" =&gt; "B", "n" =&gt; "C", "'" =&gt; "D"&lt;br /&gt;  rev_esc = hash_or_die "A" =&gt; "\\", 'B' =&gt; "\"", "C" =&gt; "n", "D" =&gt; "'"&lt;br /&gt;  data = data.gsub(/\\(.)/) {"\x00" + esc[$1]}&lt;br /&gt;  strs = []&lt;br /&gt;  data = data.gsub(/('[^']*')/) { # '&lt;br /&gt;    strs &lt;&lt; $1&lt;br /&gt;    "\x01&lt;#{strs.size-1}&gt;"&lt;br /&gt;  }&lt;br /&gt;  records = []&lt;br /&gt;  data.scan(/\((.*?)\)/) {&lt;br /&gt;    records &lt;&lt; $1.split(/,/).map{|field|&lt;br /&gt;      field.gsub(/\x01&lt;(\d+)&gt;/) {&lt;br /&gt;        strs[$1.to_i]}.gsub(/\x00(.)/){ rev_esc[$1]&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  records&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def sql_str_unquote(str)&lt;br /&gt;  str =~ /\A'(.*)'\Z/ or raise "SQL string format is wrong: #{str}"&lt;br /&gt;  $1.gsub(/\\(.)/) {$1}&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;=begin&lt;br /&gt;&lt;br /&gt;page_fn = Dir["plwiki-*-page.sql"].sort[-1]&lt;br /&gt;externallinks_fn = Dir["plwiki-*-externallinks.sql"].sort[-1]&lt;br /&gt;&lt;br /&gt;pages = {}&lt;br /&gt;&lt;br /&gt;File.open(page_fn).each{|line|&lt;br /&gt;  next unless line =~ /\AINSERT INTO `page` VALUES (.*)\Z/&lt;br /&gt;  parse($1).each{|id,ns,title,*stuff|&lt;br /&gt;    next unless ns == "0"&lt;br /&gt;    title = sql_str_unquote(title)&lt;br /&gt;    pages[id] = title&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;File.open(externallinks_fn).each{|line|&lt;br /&gt;  next unless line =~ /\AINSERT INTO `externallinks` VALUES (.*)\Z/&lt;br /&gt;  parse($1).each{|from,to,index|&lt;br /&gt;    title = pages[from]&lt;br /&gt;    next unless title&lt;br /&gt;    to = sql_str_unquote(to)&lt;br /&gt;    next unless to =~ /\Ahttp:\/\//&lt;br /&gt;    puts "#{title}\t#{to}"&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;=end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sql_dump = &lt;&lt;-EOS&lt;br /&gt;&lt;br /&gt;INSERT INTO `page` VALUES (1,0,'Astronomia','',1800,0,0,0.600461925007833,'20070601091320',8076762,8584,0), (2,0,'AWK','',329,0,0,0.487812640599732,'20070530195555',8058046,4265,0), (4,0,'Alergologia','',108,0,0,0.580574716050713,'20070520093413',7912844,292,0), ...&lt;br /&gt;INSERT INTO `page` VALUES (14880,0,'D&#378;wignica_linotorowa','',26,0,0,0.597327036408081,'20060814072401',4282357,727,0), (14881,0,'Urz&#261;dzenia_transportowe','',91,0,0,0.176666489966834,'20070527090143',2976610,1041,0), ...&lt;br /&gt;&lt;br /&gt;EOS&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;pages = {}&lt;br /&gt;&lt;br /&gt;sql_dump.each{|line|&lt;br /&gt;  next unless line =~ /\AINSERT INTO `page` VALUES (.*)\Z/&lt;br /&gt;  parse($1).each{|id,ns,title,*stuff|&lt;br /&gt;    next unless ns == "0"&lt;br /&gt;    title = sql_str_unquote(title)&lt;br /&gt;    pages[id] = title&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;p pages&lt;br /&gt;&lt;br /&gt;=begin&lt;br /&gt;&lt;br /&gt;sql_dump.each{|line|&lt;br /&gt;  next unless line =~ /\AINSERT INTO `externallinks` VALUES (.*)\Z/&lt;br /&gt;  parse($1).each{|from,to,index|&lt;br /&gt;    title = pages[from]&lt;br /&gt;    next unless title&lt;br /&gt;    to = sql_str_unquote(to)&lt;br /&gt;    next unless to =~ /\Ahttp:\/\//&lt;br /&gt;    puts "#{title}\t#{to}"&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;=end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#-----------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;require 'pp'&lt;br /&gt;&lt;br /&gt;lisp_code = '(a (b c) (d (e) f g) (((h))))'&lt;br /&gt;nodes = []&lt;br /&gt;&lt;br /&gt;lisp_code.gsub!(/([a-z]+)/) {&lt;br /&gt;  nodes &lt;&lt; [:atom, $1]&lt;br /&gt;  "&lt;#{nodes.size-1}&gt;"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#p nodes&lt;br /&gt;&lt;br /&gt;lisp_code.gsub!(/\s/,"")&lt;br /&gt;#puts lisp_code&lt;br /&gt;&lt;br /&gt;true while lisp_code.gsub!(/\(((?:&lt;\d+&gt;)*)\)/) {&lt;br /&gt;  #p nodes&lt;br /&gt;  nodes &lt;&lt; [:app, *$1.scan(/&lt;(\d+)&gt;/).map{|x,| nodes[x.to_i]}]&lt;br /&gt;  "&lt;#{nodes.size-1}&gt;"&lt;br /&gt;}&lt;br /&gt;lisp_code =~ /&lt;(\d+)&gt;/&lt;br /&gt;&lt;br /&gt;#puts&lt;br /&gt;#p nodes&lt;br /&gt;#puts&lt;br /&gt;&lt;br /&gt;pp nodes[$1.to_i]&lt;br /&gt;&lt;br /&gt;# Output:&lt;br /&gt;#  [:app,&lt;br /&gt;#  [:atom, "a"],&lt;br /&gt;#  [:app, [:atom, "b"], [:atom, "c"]],&lt;br /&gt;#  [:app, [:atom, "d"], [:app, [:atom, "e"]], [:atom, "f"], [:atom, "g"]],&lt;br /&gt;#  [:app, [:app, [:app, [:atom, "h"]]]]]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;math_code = '(2 + 2 * 2) / ((2 + 2) * 2)'&lt;br /&gt;nodes = []&lt;br /&gt;&lt;br /&gt;math_code.gsub!(/(\d+)/) {&lt;br /&gt;  nodes &lt;&lt; $1.to_i&lt;br /&gt;  "&lt;#{nodes.size-1}&gt;"&lt;br /&gt;}&lt;br /&gt;math_code.gsub!(/\s/,"")&lt;br /&gt;&lt;br /&gt;until math_code =~ /\A&lt;(\d+)&gt;\Z/&lt;br /&gt;  next if math_code.gsub!(/\((&lt;\d+&gt;)\)/) { $1 }&lt;br /&gt;  next if math_code.gsub!(/&lt;(\d+)&gt;([\*\/])&lt;(\d+)&gt;/) {&lt;br /&gt;    nodes &lt;&lt; [$2, nodes[$1.to_i], nodes[$3.to_i]]&lt;br /&gt;    "&lt;#{nodes.size-1}&gt;"&lt;br /&gt;  }&lt;br /&gt;  next if math_code.gsub!(/&lt;(\d+)&gt;([\+\-])&lt;(\d+)&gt;/) {&lt;br /&gt;    nodes &lt;&lt; [$2, nodes[$1.to_i], nodes[$3.to_i]]&lt;br /&gt;    "&lt;#{nodes.size-1}&gt;"&lt;br /&gt;  }&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;pp nodes[$1.to_i]&lt;br /&gt;&lt;br /&gt;# Output:&lt;br /&gt;# ["/", ["+", 2, ["*", 2, 2]], ["*", ["+", 2, 2], 2]]&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;</description>
      <pubDate>Thu, 06 Dec 2007 15:43:11 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4852</guid>
      <author>ntk ()</author>
    </item>
    <item>
      <title>basic parser</title>
      <link>http://snippets.dzone.com/posts/show/4815</link>
      <description>This is a very basic parser, reads each line and creates a string of ':'-separated id nos for mass-mailing a set of accounts in an online game&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;def joinIds(fin, fout):&lt;br /&gt;    """reads a page from input file, joins Ids with ':'&lt;br /&gt;    &lt;br /&gt;    returns strings to output file, max of 50 ids in each"""&lt;br /&gt;    lines = 0&lt;br /&gt;    outlist = []&lt;br /&gt;    for line in fin:&lt;br /&gt;      if line.strip() != '':&lt;br /&gt;        lines += 1&lt;br /&gt;        outlist.append(line.split()[2])&lt;br /&gt;        if lines % 50 == 0:&lt;br /&gt;            fout.write(":".join(["%s" % Id for Id in outlist]) + "\n\n")&lt;br /&gt;            outlist = []&lt;br /&gt;    fout.write(":".join(["%s" % Id for Id in outlist]) + "\n\n")&lt;br /&gt;&lt;br /&gt;try:&lt;br /&gt;    SIA = raw_input('Enter a file to read: ')&lt;br /&gt;    pages = open(SIA, 'r')&lt;br /&gt;except IOError:&lt;br /&gt;    print 'Cannot open file %s for reading. Check file exists and try again.' % SIA&lt;br /&gt;    import sys&lt;br /&gt;    sys.exit(0)&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;default = 'idFile.txt'&lt;br /&gt;out = raw_input('File name for output: ')&lt;br /&gt;if out == '':&lt;br /&gt;    oFile = open(default, 'a')&lt;br /&gt;else:&lt;br /&gt;    default = out&lt;br /&gt;    oFile = open(default, 'a')&lt;br /&gt;&lt;br /&gt;joinIds(pages, oFile)&lt;br /&gt;pages.close()&lt;br /&gt;oFile.close()&lt;br /&gt;&lt;br /&gt;print 'Id strings have been output to %s. Happy mass-mailing! ;)' % default&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 25 Nov 2007 07:39:12 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4815</guid>
      <author>druid (Geoff)</author>
    </item>
    <item>
      <title>Python: NMEA GPGGA parser</title>
      <link>http://snippets.dzone.com/posts/show/4782</link>
      <description>Not tested extensivly, use with caution! I used an LD-1W and it seems to work alright with this parser.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class GPGGAParser(object):&lt;br /&gt;	import logging&lt;br /&gt;	&lt;br /&gt;	def __init__(self, sentance):&lt;br /&gt;		import time, logging&lt;br /&gt;		&lt;br /&gt;		logging.debug("GPPGAParser started")&lt;br /&gt;		logging.debug("Trying to parse: "+sentance)&lt;br /&gt;		(self.format,&lt;br /&gt;		 self.utc,&lt;br /&gt;		 self.latitude, &lt;br /&gt;		 self.northsouth, &lt;br /&gt;		 self.longitude, &lt;br /&gt;		 self.eastwest, &lt;br /&gt;		 self.quality, &lt;br /&gt;		 self.number_of_satellites_in_use, &lt;br /&gt;		 self.horizontal_dilution, &lt;br /&gt;		 self.altitude, &lt;br /&gt;		 self.above_sea_unit, &lt;br /&gt;		 self.geoidal_separation, &lt;br /&gt;		 self.geoidal_separation_unit, &lt;br /&gt;		 self.data_age, &lt;br /&gt;		 self.diff_ref_stationID) = sentance.split(",")&lt;br /&gt;&lt;br /&gt;		latitude_in=float(self.latitude)&lt;br /&gt;		longitude_in=float(self.longitude)&lt;br /&gt;		if self.northsouth == 'S':&lt;br /&gt;			latitude_in = -latitude_in&lt;br /&gt;		if self.eastwest == 'W':&lt;br /&gt;			longitude_in = -longitude_in&lt;br /&gt;&lt;br /&gt;		latitude_degrees = int(latitude_in/100)&lt;br /&gt;		latitude_minutes = latitude_in - latitude_degrees*100&lt;br /&gt;		&lt;br /&gt;		longitude_degrees = int(longitude_in/100)&lt;br /&gt;		longitude_minutes = longitude_in - longitude_degrees*100&lt;br /&gt;		&lt;br /&gt;		self.latitude = latitude_degrees + (latitude_minutes/60)&lt;br /&gt;		self.longitude = longitude_degrees + (longitude_minutes/60)&lt;br /&gt;		&lt;br /&gt;		self.timeOfFix = time.strftime("%H:%M:%S", time.strptime(self.utc.split(".")[0],"%H%M%S"))&lt;br /&gt;		self.altitude = float(self.altitude)&lt;br /&gt;		logging.debug("GPPGAParser finished")&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 16 Nov 2007 14:12:36 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4782</guid>
      <author>ejot (Magnus Persson)</author>
    </item>
    <item>
      <title>CSV parsing regex</title>
      <link>http://snippets.dzone.com/posts/show/4430</link>
      <description>The regular expression is taken from Raimond Brookman, &lt;a href="http://blogs.infosupport.com/raimondb/archive/2005/04/27/199.aspx"&gt;Regex fun with CSV&lt;/a&gt;.&lt;br /&gt;For a good general CSV overview see &lt;a href="http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm"&gt;The Comma Separated Value (CSV) File Format&lt;/a&gt;.&lt;br /&gt;A complete Ruby CSV parsing library is &lt;a href="http://fastercsv.rubyforge.org"&gt;FasterCSV&lt;/a&gt; (sudo gem install fastercsv).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;csv_data = &lt;&lt;-EOS&lt;br /&gt;&lt;br /&gt;fname,lname,age,salary&lt;br /&gt;nancy,davolio,33,$30000&lt;br /&gt;erin,borakova,28,$25250&lt;br /&gt;tony,raphael,35,$28700&lt;br /&gt;&lt;br /&gt;"Date","Pupil","Grade"&lt;br /&gt;"25 May","Bloggs, Fred","C"&lt;br /&gt;"25 May","Doe, Jane","B"&lt;br /&gt;"15 July","Bloggs, Fred","D"&lt;br /&gt;&lt;br /&gt;123456789,"Carr, Lisa",100000.00&lt;br /&gt;444556666,"Barr, Clark",87000.00&lt;br /&gt;777227878,"Parr, Jack",123000.00&lt;br /&gt;998877665,"Charr, Lee",123000.00&lt;br /&gt;&lt;br /&gt;Conference room 1, "John,  &lt;br /&gt;Please bring the M. Mathers file for review  &lt;br /&gt;-J.L.&lt;br /&gt;"&lt;br /&gt;10/18/2002,...&lt;br /&gt;&lt;br /&gt;John,Doe,120 jefferson st.,Riverside, NJ, 08075&lt;br /&gt;Jack,McGinnis,220 hobo Av.,Phila, PA,09119&lt;br /&gt;"John ""Da Man""",Repici,120 Jefferson St.,Riverside, NJ,08075&lt;br /&gt;Stephen,Tyler,"7452 Terrace ""At the Plaza"" road",SomeTown,SD, 91234&lt;br /&gt;,Blankman,,SomeTown, SD, 00298&lt;br /&gt;"Joan ""the bone"", Anne",Jet,"9th, at Terrace plc",Desert City,CO,00123&lt;br /&gt;&lt;br /&gt;XXXX,D,3-May-02,83.01,83.58,71.13,78.04,9645300&lt;br /&gt;XXXX,D,2-May-02,82.47,85.76,82.05,83.84,7210000,&lt;br /&gt;XXXX,D,1-May-02,86.80,90.83,81.74,85.50,14253300&lt;br /&gt;&lt;br /&gt;"1997",car model,E350&lt;br /&gt;1997,car model,E350,"  Super luxurious truck    "&lt;br /&gt;1997,car model,E350,"Go get one now&lt;br /&gt;they are going fast"&lt;br /&gt;1997,car model,E350,"Super ""luxurious"" truck"&lt;br /&gt;1997,car model,E350,"Super, luxurious truck"&lt;br /&gt;&lt;br /&gt;1997,car model,E350,"ac, abs, moon",3000.00&lt;br /&gt;1999, car model,"Venture ""Extended Edition""",,4900.00,&lt;br /&gt;1996, car model,Old Car,"BEYOND REPAIR!&lt;br /&gt;air, moon roof, loaded",4799.00&lt;br /&gt;&lt;br /&gt;This,is,a test,CSV, file," from ""http://lorance.freeshell.org/csv/test.csv""."&lt;br /&gt;It contains,"quoted text",and,numbers 1234,5678&lt;br /&gt;It also has,"quoted text with an embedded quote""&lt;- right there"&lt;br /&gt;Then there are a few,,blank fields like these here -&gt;,,,&lt;br /&gt;A quoted blank field,"",&lt;- there.&lt;br /&gt;A quoted blank field with newline,"\n",&lt;- there.&lt;br /&gt;This next one causes an error if newline handling is turned off.&lt;br /&gt;"There is a newline here -&gt;&lt;br /&gt;&lt;- and it should be processed correctly."&lt;br /&gt;ABCD&lt;br /&gt;"And here,,, is an""Error - no"&lt;br /&gt;"And here,,, is an"Error - yes&lt;br /&gt;"And here,,, is an",Error - no&lt;br /&gt;&lt;br /&gt;1,2,3&lt;br /&gt;ab,"c,d","e""f", "g"",""","h&lt;br /&gt;jk",kl&lt;br /&gt;&lt;br /&gt;"aaa","bbb","ccc"&lt;br /&gt;zzz,yyy,xxx&lt;br /&gt;"aaa","b&lt;br /&gt;bb","ccc"&lt;br /&gt;zzz,yyy,xxx&lt;br /&gt;&lt;br /&gt;"aaa","b""bb","ccc"&lt;br /&gt;&lt;br /&gt;EOS&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;csv_data.split(/(,|\r\n|\n|\r)(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/m).each do |csv|&lt;br /&gt;#csv_data.split(/[,\n\r]+(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/m).each do |csv|&lt;br /&gt;&lt;br /&gt;   next if csv.empty?&lt;br /&gt;&lt;br /&gt;   csv = csv.strip&lt;br /&gt;&lt;br /&gt;   if csv =~ /\A(".*[^"]|[^"].*")\z/m then     # examples: csv =&gt; "ab\nc"def  or  abc"de\nf"&lt;br /&gt;       puts&lt;br /&gt;       puts "Error:" &lt;br /&gt;       p csv &lt;br /&gt;       puts csv[/\A./mu], csv[/.\z/mu] &lt;br /&gt;       #puts csv[0..0], csv[-1..-1] &lt;br /&gt;       puts&lt;br /&gt;       next&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;   if csv =~ /\A".*"\z/m then csv.gsub!(/\A"(.*)"\z/m, '\1') end  # remove double-quotes at string beginning &amp; end&lt;br /&gt;   if csv =~ /""/m then csv.gsub!(/""/m, '"') end                 # remove a double-quote from double double-quotes&lt;br /&gt;&lt;br /&gt;   p csv&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;</description>
      <pubDate>Sat, 18 Aug 2007 17:17:23 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4430</guid>
      <author>ntk ()</author>
    </item>
    <item>
      <title>PHP : Parsea HTML inyectado / Parser HTML inject</title>
      <link>http://snippets.dzone.com/posts/show/4347</link>
      <description>Parsea HTML Inyectado. Esto es &#250;til cuando nos escriben c&#243;digo HTML o Javascript maligno en un texarea. Para m&#225;s informaci&#243;n www.php.net / Parser HTML inject. This is good when we write HTML code or bad javascript on a textarea. For more info www.php.net (sorry english)&lt;br /&gt;C&#243;digo fuente / Source code : &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;function parsearHTMLInjectado($texto)&lt;br /&gt;{&lt;br /&gt;	return nl2br( htmlentities($texto) );	&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 23 Jul 2007 11:16:14 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4347</guid>
      <author>Ricardo (Ricardo m. Garc&#237;a)</author>
    </item>
    <item>
      <title>Java - Dom Parser Example</title>
      <link>http://snippets.dzone.com/posts/show/3575</link>
      <description>// Simple Parser XML with DOM&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;package parser;&lt;br /&gt;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;&lt;br /&gt;import javax.xml.parsers.DocumentBuilderFactory;&lt;br /&gt;import javax.xml.parsers.ParserConfigurationException;&lt;br /&gt;&lt;br /&gt;import org.w3c.dom.Document;&lt;br /&gt;import org.w3c.dom.Node;&lt;br /&gt;import org.w3c.dom.NodeList;&lt;br /&gt;import org.xml.sax.SAXException;&lt;br /&gt;&lt;br /&gt;public class DOMParser&lt;br /&gt;{&lt;br /&gt;	private Document doc = null;&lt;br /&gt;	&lt;br /&gt;	public DOMParser()&lt;br /&gt;	{&lt;br /&gt;		try&lt;br /&gt;		{&lt;br /&gt;			doc = parserXML(new File("parser/file.xml"));&lt;br /&gt;			&lt;br /&gt;			visit(doc, 0);&lt;br /&gt;		}&lt;br /&gt;		catch(Exception error)&lt;br /&gt;		{&lt;br /&gt;			error.printStackTrace();&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	public void visit(Node node, int level)&lt;br /&gt;	{&lt;br /&gt;		NodeList nl = node.getChildNodes();&lt;br /&gt;		&lt;br /&gt;		for(int i=0, cnt=nl.getLength(); i&lt;cnt; i++)&lt;br /&gt;		{&lt;br /&gt;			System.out.println("["+nl.item(i)+"]");&lt;br /&gt;			&lt;br /&gt;			visit(nl.item(i), level+1);&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	public Document parserXML(File file) throws SAXException, IOException, ParserConfigurationException&lt;br /&gt;	{&lt;br /&gt;		return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file);&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	public static void main(String[] args)&lt;br /&gt;	{&lt;br /&gt;		new DOMParser();&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 23 Feb 2007 19:08:17 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3575</guid>
      <author>whitetiger ()</author>
    </item>
    <item>
      <title>Python - Very Simple Parser</title>
      <link>http://snippets.dzone.com/posts/show/3263</link>
      <description>// Very Simple Parser &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;from sgmllib import SGMLParser&lt;br /&gt;&lt;br /&gt;import urllib&lt;br /&gt;&lt;br /&gt;class ParserHTML(SGMLParser):&lt;br /&gt;&lt;br /&gt;	def scrivi(self):&lt;br /&gt;		self.f = open('/tmp/fileOUT.html', 'w')&lt;br /&gt;&lt;br /&gt;	def unknown_starttag(self, tag, attrs):&lt;br /&gt;&lt;br /&gt;		value = 0&lt;br /&gt;		startTAG = '&lt;' + tag&lt;br /&gt;		&lt;br /&gt;		for i in attrs:&lt;br /&gt;			if(i[0].lower() == i[1].lower() and not i[0] == i[1]):&lt;br /&gt;				startTAG = startTAG[:-1] + ' ' + str(i[1])&lt;br /&gt;				value = 1&lt;br /&gt;			else:&lt;br /&gt;				startTAG += ' ' + str(i[0]) + '="' + str(i[1]) + '"'&lt;br /&gt;				value = 0&lt;br /&gt;		&lt;br /&gt;		if(value == 1): startTAG += '"'&lt;br /&gt;&lt;br /&gt;		startTAG += '&gt;'&lt;br /&gt;		self.f.write(startTAG + "\n")&lt;br /&gt;&lt;br /&gt;	def handle_data(self, data):&lt;br /&gt;&lt;br /&gt;		self.f.write(data + "\n")&lt;br /&gt;&lt;br /&gt;	def unknown_endtag(self, tag):&lt;br /&gt;&lt;br /&gt;		self.f.write('&lt;/' + tag + '&gt;' + "\n")&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;&lt;br /&gt;	p = ParserHTML()&lt;br /&gt;	p.scrivi()&lt;br /&gt;	p.feed(open('/tmp/fileIN.html', 'r').read())&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 09 Jan 2007 23:21:59 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3263</guid>
      <author>whitetiger ()</author>
    </item>
    <item>
      <title>CSV Parser / Writer for PHP</title>
      <link>http://snippets.dzone.com/posts/show/3128</link>
      <description>CSV Parser / Writer&lt;br /&gt;&lt;br /&gt;Example A:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//cell separator, row separator, value enclosure&lt;br /&gt;$csv = new CSV(';', "\r\n", '"');&lt;br /&gt;&lt;br /&gt;//parse the string content&lt;br /&gt;$csv-&gt;setContent(file_get_contents('data.csv'));&lt;br /&gt;&lt;br /&gt;//returns an array with the CSV data&lt;br /&gt;print_r($csv-&gt;getArray());&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Exemple B:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$csv = new CSV(';', "\r\n", '"');&lt;br /&gt;//sets up the content through an array&lt;br /&gt;$csv-&gt;setArray(&lt;br /&gt;	array(&lt;br /&gt;		array('col"una1', "colu\r\nna2"),&lt;br /&gt;		array('col;una3', 'coluna4')&lt;br /&gt;	)&lt;br /&gt;);&lt;br /&gt;//retorns string with the CSV representation&lt;br /&gt;print $csv-&gt;getContent();&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;//+ Jonas Raoni Soares Silva&lt;br /&gt;//@ http://jsfromhell.com&lt;br /&gt;class CSV{&lt;br /&gt;	var $cellDelimiter;&lt;br /&gt;	var $valueEnclosure;&lt;br /&gt;	var $rowDelimiter;&lt;br /&gt;&lt;br /&gt;	function CSV($cellDelimiter, $rowDelimiter, $valueEnclosure){&lt;br /&gt;		$this-&gt;cellDelimiter = $cellDelimiter;&lt;br /&gt;		$this-&gt;valueEnclosure = $valueEnclosure;&lt;br /&gt;		$this-&gt;rowDelimiter = $rowDelimiter;&lt;br /&gt;		$this-&gt;o = array();&lt;br /&gt;	}&lt;br /&gt;	function getArray(){&lt;br /&gt;		return $this-&gt;o;&lt;br /&gt;	}&lt;br /&gt;	function setArray($o){&lt;br /&gt;		$this-&gt;o = $o;&lt;br /&gt;	}&lt;br /&gt;	function getContent(){&lt;br /&gt;		if(!(($bl = strlen($b = $this-&gt;rowDelimiter)) &amp;&amp; ($dl = strlen($d = $this-&gt;cellDelimiter)) &amp;&amp; ($ql = strlen($q = $this-&gt;valueEnclosure))))&lt;br /&gt;			return '';&lt;br /&gt;		for($o = $this-&gt;o, $i = -1; ++$i &lt; count($o);){&lt;br /&gt;			for($e = 0, $j = -1; ++$j &lt; count($o[$i]);)&lt;br /&gt;				(($e = strpos($o[$i][$j], $q) !== false) || strpos($o[$i][$j], $b) !== false || strpos($o[$i][$j], $d) !== false)&lt;br /&gt;				&amp;&amp; $o[$i][$j] = $q . ($e ? str_replace($q, $q . $q, $o[$i][$j]) : $o[$i][$j]) . $q;&lt;br /&gt;			$o[$i] = implode($d, $o[$i]);&lt;br /&gt;		}&lt;br /&gt;		return implode($b, $o);&lt;br /&gt;	}&lt;br /&gt;	function setContent($s){&lt;br /&gt;		$this-&gt;o = array();&lt;br /&gt;		if(!strlen($s))&lt;br /&gt;			return true;&lt;br /&gt;		if(!(($bl = strlen($b = $this-&gt;rowDelimiter)) &amp;&amp; ($dl = strlen($d = $this-&gt;cellDelimiter)) &amp;&amp; ($ql = strlen($q = $this-&gt;valueEnclosure))))&lt;br /&gt;			return false;&lt;br /&gt;		for($o = array(array('')), $this-&gt;o = &amp;$o, $e = $r = $c = 0, $i = -1, $l = strlen($s); ++$i &lt; $l;){&lt;br /&gt;			if(!$e &amp;&amp; substr($s, $i, $bl) == $b){&lt;br /&gt;				$o[++$r][$c = 0] = '';&lt;br /&gt;				$i += $bl - 1;&lt;br /&gt;			}&lt;br /&gt;			elseif(substr($s, $i, $ql) == $q){&lt;br /&gt;				$e ? (substr($s, $i + $ql, $ql) == $q ?&lt;br /&gt;				$o[$r][$c] .= substr($s, $i += $ql, $ql) : $e = 0)&lt;br /&gt;				: (strlen($o[$r][$c]) == 0 ? $e = 1 : $o[$r][$c] .= substr($s, $i, $ql));&lt;br /&gt;				$i += $ql - 1;&lt;br /&gt;			}&lt;br /&gt;			elseif(!$e &amp;&amp; substr($s, $i, $dl) == $d){&lt;br /&gt;				$o[$r][++$c] = '';&lt;br /&gt;				$i += $dl - 1;&lt;br /&gt;			}&lt;br /&gt;			else&lt;br /&gt;				$o[$r][$c] .= $s[$i];&lt;br /&gt;		}&lt;br /&gt;		return true;&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 11 Dec 2006 22:36:10 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3128</guid>
      <author>jonasraoni (Jonas Raoni Soares Silva)</author>
    </item>
    <item>
      <title>Math Parser //JavaScript Class</title>
      <link>http://snippets.dzone.com/posts/show/2207</link>
      <description>&lt;a href="http://www.jsfromhell.com/classes/math-processor"&gt;&lt;br /&gt;This class is able to parse math expressions and also run user defined functions.&lt;br /&gt;&lt;br /&gt;On JavaScript there's the "eval" function, that can do such things well, but this code objective was just to give me fun or a new challenge =)~&lt;br /&gt;&lt;br /&gt;[UPDATED CODE AND HELP CAN BE FOUND HERE]&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Usage:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;x = new MathProcessor;&lt;br /&gt;try{alert(x.parse("1+2-(3*4) + medium(2,3) - frac( 2.2231)"));}&lt;br /&gt;catch(e){alert(e);}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;It's possible to add more functions to the class, just add them into the "methods" property ;]&lt;br /&gt;&lt;br /&gt;Well, that's it :)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//+ Jonas Raoni Soares Silva&lt;br /&gt;//@ http://jsfromhell.com/classes/math-processor [v1.0]&lt;br /&gt;&lt;br /&gt;MathProcessor = function(){ //v1.0&lt;br /&gt;    var o = this;&lt;br /&gt;    o.o = {&lt;br /&gt;        "+": function(a, b){ return +a + b; },&lt;br /&gt;        "-": function(a, b){ return a - b; },&lt;br /&gt;        "%": function(a, b){ return a % b; },&lt;br /&gt;        "/": function(a, b){ return a / b; },&lt;br /&gt;        "*": function(a, b){ return a * b; },&lt;br /&gt;        "^": function(a, b){ return Math.pow(a, b); },&lt;br /&gt;        "~": function(a, b){ return Math.sqrt(a, b); }&lt;br /&gt;    };&lt;br /&gt;    o.s = { "^": 3, "~": 3, "*": 2, "/": 2, "%": 1, "+": 0, "-": 0 };&lt;br /&gt;    o.u = {"+": 1, "-": -1}, o.p = {"(": 1, ")": -1};&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;MathProcessor.prototype.parse = function(e){&lt;br /&gt;    for(var n, x, o = [], s = [x = this.RPN(e.replace(/ /g, "").split(""))]; s.length;)&lt;br /&gt;        for((n = s[s.length-1], --s.length); n[2]; o[o.length] = n, s[s.length] = n[3], n = n[2]);&lt;br /&gt;    for(; (n = o.pop()) != undefined; n[0] = this.o[n[0]](isNaN(n[2][0]) ? this.f(n[2][0]) : n[2][0], isNaN(n[3][0]) ? this.f(n[3][0]) : n[3][0]));&lt;br /&gt;    return +x[0];&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;MathProcessor.prototype.methods = {&lt;br /&gt;    "div": function(a, b){ return parseInt(a / b); },&lt;br /&gt;    "frac": function(a){ return a - parseInt(a); },&lt;br /&gt;    "sum": function(n1, n2, n3, n){ for(var r = 0, a, l = (a = arguments).length; l; r += a[--l]); return r; },&lt;br /&gt;    "medium": function(a, b){ return (a + b) / 2; }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;MathProcessor.prototype.error = function(s){&lt;br /&gt;    throw new Error("MathProcessor: " + (s || "Erro na express&#227;o"));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;MathProcessor.prototype.RPN = function(e){&lt;br /&gt;    var _, r, c = r = [, , , 0];&lt;br /&gt;    if(e[0] in this.u || !e.unshift("+"))&lt;br /&gt;        for(; e[1] in this.u; e[0] = this.u[e.shift()] * this.u[e[0]] + 1 ? "+" : "-");&lt;br /&gt;    (c[3] = [this.u[e.shift()], c, , 0])[1][0] = "*", (r = [, , c, 0])[2][1] = r;&lt;br /&gt;    (c[2] = this.v(e))[1] = c;&lt;br /&gt;    (!e.length &amp;&amp; (r = c)) || (e[0] in this.s &amp;&amp; ((c = r)[0] = e.shift(), !e.length &amp;&amp; this.error()));&lt;br /&gt;     while(e.length){&lt;br /&gt;        if(e[0] in this.u){&lt;br /&gt;            for(; e[1] in this.u; e[0] = this.u[e.shift()] * this.u[e[0]] + 1 ? "+" : "-");&lt;br /&gt;            (c = c[3] = ["*", c, , 0])[2] = [-1, c, , 0];&lt;br /&gt;        }&lt;br /&gt;        (c[3] = this.v(e))[1] = c;&lt;br /&gt;        e[0] in this.s &amp;&amp; (c = this.s[e[0]] &gt; this.s[c[0]] ?&lt;br /&gt;            ((c[3] = (_ = c[3], c[2]))[1][2] = [e.shift(), c, _, 0])[2][1] = c[2]&lt;br /&gt;            : r == c ? (r = [e.shift(), , c, 0])[2][1] = r&lt;br /&gt;            : ((r[2] = (_ = r[2], [e.shift(), r, ,0]))[2] = _)[1] = r[2]);&lt;br /&gt;    }&lt;br /&gt;    return r;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;MathProcessor.prototype.v = function(e){&lt;br /&gt;    if("0123456789.".indexOf(e[0]) + 1){&lt;br /&gt;        for(var i = -1, l = e.length; ++i &lt; l &amp;&amp; "0123456789.".indexOf(e[i]) + 1;);&lt;br /&gt;        return [+e.splice(0,i).join(""), , , 0];&lt;br /&gt;    }&lt;br /&gt;    else if(e[0] == "("){&lt;br /&gt;        for(var i = 0, l = e.length, j = 1; ++i &lt; l &amp;&amp; (e[i] in this.p &amp;&amp; (j += this.p[e[i]]), j););&lt;br /&gt;        return this.RPN(l = e.splice(0,i), l.shift(), !j &amp;&amp; e.shift());&lt;br /&gt;    }&lt;br /&gt;    else{&lt;br /&gt;        var i = 0, c = e[0].toLowerCase();&lt;br /&gt;        if((c &gt;= "a" &amp;&amp; c &lt;= "z") || c == "_"){&lt;br /&gt;            while(((c = e[++i].toLowerCase()) &gt;= "a" &amp;&amp; c &lt;= "z") || c == "_" || (c &gt;= 0 &amp;&amp; c &lt;= 9));&lt;br /&gt;            if(c == "("){&lt;br /&gt;                for(var l = e.length, j = 1; ++i &lt; l &amp;&amp; (e[i] in this.p &amp;&amp; (j += this.p[e[i]]), j););&lt;br /&gt;                return [e.splice(0,i+1).join(""), , , 0];&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    this.error();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;MathProcessor.prototype.f = function(e){&lt;br /&gt;    var i = 0, n;&lt;br /&gt;    if(((e = e.split(""))[i] &gt;= "a" &amp;&amp; e[i] &lt;= "z") || e[i] == "_"){&lt;br /&gt;        while((e[++i] &gt;= "a" &amp;&amp; e[i] &lt;= "z") || e[i] == "_" || (e[i] &gt;= 0 &amp;&amp; e[i] &lt;= 9));&lt;br /&gt;        if(e[i] == "("){&lt;br /&gt;            !this.methods[n = e.splice(0, i).join("")] &amp;&amp; this.error("Fun&#231;&#227;o \"" + n + "\" n&#227;o encontrada"), e.shift();&lt;br /&gt;            for(var a = [], i = -1, j = 1; e[++i] &amp;&amp; (e[i] in this.p &amp;&amp; (j += this.p[e[i]]), j);)&lt;br /&gt;                j == 1 &amp;&amp; e[i] == "," &amp;&amp; (a.push(this.parse(e.splice(0, i).join(""))), e.shift(), i = -1);&lt;br /&gt;            a.push(this.parse(e.splice(0,i).join(""))), !j &amp;&amp; e.shift();&lt;br /&gt;        }&lt;br /&gt;        return this.methods[n].apply(this, a);&lt;br /&gt;    }&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 15 Jun 2006 20:34:52 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2207</guid>
      <author>jonasraoni (Jonas Raoni Soares Silva)</author>
    </item>
  </channel>
</rss>
