<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title>Recent Posts in 'Groovy Geocoding Script pg 222 - where do new blocks of code go?' | Pragmatic Forums</title>
    <link>http://forums.pragprog.com/forums/9/topics/335</link>
    <language>en-us</language>
    <ttl>60</ttl>
    <description></description>
    <item>
      <title>Groovy Geocoding Script pg 222 - where do new blocks of code go? posted by lcp @ Mon, 31 Mar 2008 23:37:00 -0000</title>
      <description>&lt;p&gt;Thanks very much, I&amp;#8217;ll write to Scott Davis, the author, and see if he has the code or could post it here.&lt;/p&gt;


	&lt;p&gt;Lela&lt;/p&gt;</description>
      <pubDate>Mon, 31 Mar 2008 23:37:00 -0000</pubDate>
      <guid isPermaLink="false">forums.pragprog.com:9:335:2519</guid>
      <author>lcp</author>
      <link>http://forums.pragprog.com/forums/9/topics/335</link>
    </item>
    <item>
      <title>Groovy Geocoding Script pg 222 - where do new blocks of code go? posted by Greg Cermak @ Wed, 26 Mar 2008 18:12:32 -0000</title>
      <description>&lt;p&gt;In chapter 9: Geocoding your data of &amp;#8216;GIS for Web Developers&amp;#8217; the source for the following methods which should be in class Addr are missing&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;noQuote()&lt;/li&gt;
		&lt;li&gt;toSQL()&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;This chapter was poorly editted. Also there are no source code listings available to check for download.&lt;/p&gt;


	&lt;p&gt;Thanks&lt;/p&gt;


	&lt;p&gt;Greg Cermak&lt;/p&gt;</description>
      <pubDate>Wed, 26 Mar 2008 18:12:32 -0000</pubDate>
      <guid isPermaLink="false">forums.pragprog.com:9:335:2493</guid>
      <author>Greg Cermak</author>
      <link>http://forums.pragprog.com/forums/9/topics/335</link>
    </item>
    <item>
      <title>Groovy Geocoding Script pg 222 - where do new blocks of code go? posted by lcp @ Tue, 25 Mar 2008 00:11:24 -0000</title>
      <description>&lt;p&gt;I hope that someone can help me with the Groovy script presented in&lt;br /&gt;the &amp;#8220;Geocoding Your Data&amp;#8221; section. I was able to use the first part&lt;br /&gt;successfully to load comma-delimited data into my postgress database, but&lt;br /&gt;I&amp;#8217;m having trouble with the instructions on building in the geocoder.&lt;/p&gt;


	&lt;p&gt;I have attached my code below &amp;#8211; I have worked up to the point&lt;br /&gt;just before 9.3 &amp;#8220;Adding PostGIS fields&amp;#8221;.&lt;/p&gt;


	&lt;p&gt;Currently, I get the error:&lt;br /&gt;startup failed, notworking_fixer.groovy: 100: unexpected token: } @&lt;br /&gt;line 100, column 1.&lt;br /&gt;1 error&lt;/p&gt;


	&lt;p&gt;I think I am misunderstanding where to put the blocks of code within&lt;br /&gt;my script after adding the expanded ddl statement.&lt;br /&gt;I&amp;#8217;m not sure if class Addr and public Addr go right after the ddl&lt;br /&gt;statement. Then, I&amp;#8217;m not sure what  } ... }  means written in the book&lt;br /&gt;after the public Addr statement. Also I don&amp;#8217;t know if I have the&lt;br /&gt;geocode method or the Fixer statement in the right places.&lt;/p&gt;


	&lt;p&gt;Any help is much appreciated!&lt;/p&gt;


	&lt;p&gt;Lela&lt;/p&gt;


	&lt;p&gt;Groovy Script Pg 222&lt;/p&gt;


	&lt;p&gt;outputFile = new File(&amp;#8220;college.sql&amp;#8221;) &lt;br /&gt;if(outputFile.exists()){ outputFile.delete() } &lt;br /&gt;ddl = &amp;#8221;&amp;#8221;&amp;#8221; &lt;br /&gt;&lt;span class="caps"&gt;BEGIN&lt;/span&gt;; &lt;br /&gt;&lt;span class="caps"&gt;CREATE TABLE&lt;/span&gt; college ( &lt;br /&gt;&amp;#8220;id&amp;#8221; numeric &lt;span class="caps"&gt;PRIMARY KEY&lt;/span&gt;, &lt;br /&gt;&amp;#8220;name&amp;#8221; varchar(255), &lt;br /&gt;&amp;#8220;address&amp;#8221; varchar(255), &lt;br /&gt;&amp;#8220;city&amp;#8221; varchar(255), &lt;br /&gt;&amp;#8220;state&amp;#8221; varchar(255), &lt;br /&gt;&amp;#8220;zip&amp;#8221; varchar(255), &lt;br /&gt;&amp;#8220;lat&amp;#8221; varchar(255), &lt;br /&gt;&amp;#8220;lon&amp;#8221; varchar(255), &lt;br /&gt;&amp;#8220;address_n&amp;#8221; varchar(255), &lt;br /&gt;&amp;#8220;city_n&amp;#8221; varchar(255), &lt;br /&gt;&amp;#8220;state_n&amp;#8221; varchar(255), &lt;br /&gt;&amp;#8220;zip_n&amp;#8221; varchar(255)); &lt;br /&gt;&amp;#8221;&amp;#8221;&amp;#8220;&lt;/p&gt;


	&lt;p&gt;class Addr{ &lt;br /&gt;String id &lt;br /&gt;String name &lt;br /&gt;String address &lt;br /&gt;String city &lt;br /&gt;String state &lt;br /&gt;String zip &lt;br /&gt;String lat &lt;br /&gt;String lon &lt;br /&gt;String addressNormalized &lt;br /&gt;String cityNormalized &lt;br /&gt;String stateNormalized &lt;br /&gt;String zipNormalized&lt;/p&gt;


	&lt;p&gt;public Addr(String[] tokens){ &lt;br /&gt;id = tokens&lt;sup&gt;&lt;a href="#fn0"&gt;0&lt;/a&gt;&lt;/sup&gt;.noQuote() &lt;br /&gt;name = tokens&lt;sup&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;.noQuote() &lt;br /&gt;address = tokens&lt;sup&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt;.noQuote() &lt;br /&gt;city = tokens&lt;sup&gt;&lt;a href="#fn3"&gt;3&lt;/a&gt;&lt;/sup&gt;.noQuote() &lt;br /&gt;state = tokens&lt;sup&gt;&lt;a href="#fn4"&gt;4&lt;/a&gt;&lt;/sup&gt;.noQuote() &lt;br /&gt;zip = tokens&lt;sup&gt;&lt;a href="#fn5"&gt;5&lt;/a&gt;&lt;/sup&gt;.noQuote()&lt;/p&gt;


	&lt;p&gt;}}&lt;/p&gt;


	&lt;p&gt;public boolean geocode(){ &lt;br /&gt;def urlStart = &amp;#8220;http://rpc.geocoder.us/service/csv?address=&amp;#8221; &lt;br /&gt;def urlBody = &amp;#8221;${address},${city},${state},${zip}&amp;#8221; &lt;br /&gt;def urlEncoded = urlStart + URLEncoder.encode(urlBody, &amp;#8220;UTF-8&amp;#8221;) &lt;br /&gt;new &lt;acronym title="urlEncoded"&gt;URL&lt;/acronym&gt;.eachLine{ line -&amp;gt; &lt;br /&gt;println &amp;#8221;\t${line}&amp;#8221; &lt;br /&gt;if(line.startsWith(&amp;#8220;2&amp;#8221;)){ &lt;br /&gt;addressNormalized = &amp;#8220;NOT &lt;span class="caps"&gt;FOUND&lt;/span&gt;&amp;#8221; &lt;br /&gt;} &lt;br /&gt;else{ &lt;br /&gt;def tokens = line.getNext(6) &lt;br /&gt;lat = tokens&lt;sup&gt;&lt;a href="#fn0"&gt;0&lt;/a&gt;&lt;/sup&gt; &lt;br /&gt;lon = tokens&lt;sup&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;br /&gt;addressNormalized = tokens&lt;sup&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt;.fixQuote() &lt;br /&gt;cityNormalized = tokens&lt;sup&gt;&lt;a href="#fn3"&gt;3&lt;/a&gt;&lt;/sup&gt;.fixQuote() &lt;br /&gt;stateNormalized = tokens&lt;sup&gt;&lt;a href="#fn4"&gt;4&lt;/a&gt;&lt;/sup&gt;.fixQuote() &lt;br /&gt;zipNormalized = tokens&lt;sup&gt;&lt;a href="#fn5"&gt;5&lt;/a&gt;&lt;/sup&gt;.fixQuote() &lt;br /&gt;} &lt;br /&gt;} &lt;br /&gt;return addressNormalized != &amp;#8220;NOT &lt;span class="caps"&gt;FOUND&lt;/span&gt;&amp;#8221; &lt;br /&gt;}&lt;/p&gt;


	&lt;p&gt;outputFile.append(ddl) &lt;br /&gt;// new code &lt;br /&gt;// ED: how do I make this bold? &lt;br /&gt;insertStart = &amp;#8221;&amp;#8221;&amp;#8220;insert into college (&amp;#8220;id&amp;#8221;, &amp;#8220;name&amp;#8221;, &amp;#8220;address&amp;#8221;, &lt;br /&gt;&amp;#8220;city&amp;#8221;, &amp;#8220;state&amp;#8221;, &amp;#8220;zip&amp;#8221;, &amp;#8220;lat&amp;#8221;, &amp;#8220;lon&amp;#8221;, &amp;#8220;address_n&amp;#8221;, &amp;#8220;city_n&amp;#8221;, &amp;#8220;state_n&amp;#8221;, &amp;#8220;zip_n&amp;#8221;) values(&amp;#8221;&amp;#8221;&amp;#8221; &lt;br /&gt;insertEnd = &amp;#8220;);&amp;#8221; &lt;br /&gt;counter = 0 &lt;br /&gt;inputFile = new File(&amp;#8220;sample.csv&amp;#8221;)&lt;/p&gt;


	&lt;p&gt;use(Fixer){ &lt;br /&gt;inputFile.eachLine{ line -&amp;gt; &lt;br /&gt;String[] tokens = line.getNext(6) &lt;br /&gt;if(counter == 0) { &lt;br /&gt;/* skip the headers */ &lt;br /&gt;counter++ &lt;br /&gt;} &lt;br /&gt;else{ &lt;br /&gt;println &amp;#8221;${counter+&lt;ins&gt;} ${tokens&lt;sup&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;.fixQuote()}&amp;#8221; //show what&amp;#8217;s going on &lt;br /&gt;addr = new Addr(tokens) &lt;br /&gt;addr.geocode() ? found&lt;/ins&gt;+ : notFound++&lt;br /&gt;insertMiddle = &amp;#8221;&amp;#8221; &lt;br /&gt;for(i in 0..5){ &lt;br /&gt;insertMiddle += &amp;#8221;${tokens[i].fixQuote()},&amp;#8221; &lt;br /&gt;} &lt;br /&gt;insertMiddle += addr.toSql() &lt;br /&gt;//insertMiddle = insertMiddle[0..-2] //strip off trailing comma &lt;br /&gt;outputFile.append(&amp;#8221;${insertStart}${insertMiddle}${insertEnd}\n&amp;#8221;)&lt;/p&gt;


	&lt;p&gt;//write out current status &lt;br /&gt;statusFile = new File(&amp;#8220;status.txt&amp;#8221;) &lt;br /&gt;statusFile.append(new Status(counter, found, notFound).toString()&lt;br /&gt;} &lt;br /&gt;} &lt;br /&gt;}&lt;/p&gt;


	&lt;p&gt;outputFile.append(&amp;#8220;END;&amp;#8221;)&lt;/p&gt;


	&lt;p&gt;class Fixer{ &lt;br /&gt;static String fixQuote(String self){&lt;br /&gt;self = self&lt;sup&gt;&lt;a href="#fn0"&gt;0&lt;/a&gt;&lt;/sup&gt; + self[1..-2].replaceAll(&amp;#8221;\&amp;#8217;&amp;#8221;, &amp;#8221;\&amp;#8217;\&amp;#8217;&amp;#8221;) + self[-1] &lt;br /&gt;if(self.startsWith(&amp;#8221;\&amp;#8221;&amp;#8220;)){ &lt;br /&gt;return &amp;#8221;&amp;#8217;&amp;#8221; + self[1..-2] + &amp;#8221;&amp;#8217;&amp;#8221; &lt;br /&gt;} &lt;br /&gt;else{ &lt;br /&gt;return self &lt;br /&gt;} &lt;br /&gt;}&lt;/p&gt;


	&lt;p&gt;static String[] getNext(String self, int numberOf){ &lt;br /&gt;def list = [] &lt;br /&gt;def st = new StringTokenizer(self, &amp;#8221;,&amp;#8221;) &lt;br /&gt;numberOf.times{ &lt;br /&gt;def thisToken = st.nextToken() &lt;br /&gt;while(thisToken.startsWith(&amp;#8221;\&amp;#8221;&amp;#8220;) &amp;#38;&amp;#38; !thisToken.endsWith(&amp;#8221;\&amp;#8221;&amp;#8220;) ){ &lt;br /&gt;thisToken += &amp;#8221;,&amp;#8221; + st.nextToken() &lt;br /&gt;} &lt;br /&gt;list &amp;lt;&amp;lt; thisToken &lt;br /&gt;} &lt;br /&gt;return list &lt;br /&gt;} &lt;br /&gt;}&lt;/p&gt;</description>
      <pubDate>Tue, 25 Mar 2008 00:11:24 -0000</pubDate>
      <guid isPermaLink="false">forums.pragprog.com:9:335:2486</guid>
      <author>lcp</author>
      <link>http://forums.pragprog.com/forums/9/topics/335</link>
    </item>
  </channel>
</rss>
