<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Convert centroid to GPIN in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/convert-centroid-to-gpin/m-p/208661#M16142</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Darren,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;No problem at all!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The only thing I would add is that the Field Calculator works a bit differently from the other environments you mentioned. The Field Calculator itself actually functions as an Update Cursor, so there's no need to scroll through values one row at a time: Field Calculator will do that for you!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In fact, the code would look much simpler (though there is usually a need to separate the bulk of the code into a function under Code Block so as not to clutter the one-line Expression field)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
########
# GPIN2 = #
########
compile_GPIN(!XCentroid!, !YCentroid!)


########################
# Code Block / Pre-Logic Script Code#
########################
def compile_GPIN(XCentroid, YCentroid):&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; strX = str(XCentroid)
&amp;nbsp;&amp;nbsp;&amp;nbsp; strY = str(YCentroid)
&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIN = (strX[2] + strY[1] + strX[3] + strY[2] + "-" +
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strX[4] + strY[3] + "-" +
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strX[5] + strY[4] + strX[6] + strY[5])
&amp;nbsp;&amp;nbsp;&amp;nbsp; return GPIN&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The !XCentroid! and !YCentroid! passed to the compile_GPIN function keep sending the appropriate values for those fields, one row at a time. And, for each row, the 'return' sends the GPIN value back to the field to be written, one row at a time.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best of luck in the rest of your program!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Marc&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 11 Dec 2021 10:18:27 GMT</pubDate>
    <dc:creator>MarcNakleh</dc:creator>
    <dc:date>2021-12-11T10:18:27Z</dc:date>
    <item>
      <title>Convert centroid to GPIN</title>
      <link>https://community.esri.com/t5/python-questions/convert-centroid-to-gpin/m-p/208656#M16137</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hello all,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've been working on converting our VBA code for GPIN calculation to python.&amp;nbsp; I can create a single instance GPIN via python, though really inelegant, but processing more than one is causing me a problem. I've created X and Y fields in our Feature Class.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Our original code, used in Field Calculator, is:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Dim dblX As Double&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Dim dblY As Double&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Dim strX As String&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Dim strY As String&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Dim strGPIN As String&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Dim pArea As IArea&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Set pArea = [Shape]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dblX = pArea.Centroid.X&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dblY = pArea.Centroid.Y&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;strX = CStr(dblX)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;strY = CStr(dblY)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;strGPIN = Mid(strX,3,1)+Mid(strY,2,1)+Mid(strX,4,1)+Mid(strY,3,1)+"-"+Mid(strX,5,1)+Mid(strY,4,1)+"-"+Mid(strX,6,1)+Mid(strY,5,1)+Mid(strX,7,1)+Mid(strY,6,1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My solution, so far, is:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;import arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;from arcpy import env&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;import os&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;env.workspace=r"***\Default.gdb"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#set local variables&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;inFeatures = "FeatureClass"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;XCentroid="xCentroid"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;YCentroid="yCentroid"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;tableField="GPIN2"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#Load values into Variables&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;scurfc=arcpy.SearchCursor(inFeatures)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for sf in scurfc:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; X=sf.getValue(XCentroid)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; strX=repr(X)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; Y=sf.getValue(YCentroid)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; strY=repr(Y)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; GPIN=(strX[2:3]+strY[1:2]+strX[3:4]+strY[2:3]+"-"+strX[4:5]+strY[3:4]+"-"+strX[5:6]+strY[4:5]+strX[6:7]+strY[5:6])&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#Delete variables&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;del tableField, scurfc, X, Y, strX, strY, XCentroid, YCentroid, GPIN&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have tried the CalculateField_management route, but it fails because my GPIN variable isn't a SQL statement.&amp;nbsp; Can anyone give me a push in the right direction?&amp;nbsp; The online code examples do not reflect a SearchCursor and an UpdateCursor function in the same listing.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks in advance&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 25 Aug 2011 19:23:29 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/convert-centroid-to-gpin/m-p/208656#M16137</guid>
      <dc:creator>DarrenJones</dc:creator>
      <dc:date>2011-08-25T19:23:29Z</dc:date>
    </item>
    <item>
      <title>Re: Convert centroid to GPIN</title>
      <link>https://community.esri.com/t5/python-questions/convert-centroid-to-gpin/m-p/208657#M16138</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hello there,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What kind of error are you getting, exactly?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;First, there's no need to slice your Python lists if you're looking to read single values. You could therefore rewrite your GPIN as:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;GPIN= strX[2] + strY[1] + strX[3] + strY[2] + '-' + strX[4] + strY[3] + '-' + strX[5] + strY[4] + strX[6] + strY[5]&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Second, I assume that there is a line in your actual code where you write your value to the GPIN2 field.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SearchCursor is a Read-only iterator for values in a table. As you want to write as well, you should be using UpdateCursor, appending the code with:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;sf.setValue(tableField, GPIN)
scurfc.updateRow(sf)&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;so as to write the value to the field, then update the row with the value.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Finally, I don't know if &lt;/SPAN&gt;&lt;A href="http://docs.python.org/library/functions.html#repr" rel="nofollow noopener noreferrer" target="_blank"&gt;repr&lt;/A&gt;&lt;SPAN&gt; is what you're looking for. If the X and Y coordinates are being stored in stand-alone columns (as strings or integer, for example), then you can just call them directly.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I was able to get something working using the following:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;import arcpy
import os

#set local variables
inFeatures = 'FeatureClass'
XCentroid = 'xCentroid'
YCentroid = 'yCentroid'
tableField = 'GPIN2'

#Load values into Variables
arcpy.env.workspace = r'***\Default.gdb'
scurfc = arcpy.SearchCursor(inFeatures)
for sf in scurfc:
&amp;nbsp;&amp;nbsp;&amp;nbsp; strX = str(sf.getValue(XCentroid))
&amp;nbsp;&amp;nbsp;&amp;nbsp; strY = str(sf.getValue(YCentroid))
&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIN = (strX[2] + strY[1] + strX[3] + strY[2] + '-' +
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strX[4] + strY[3] + '-' +
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strX[5] + strY[4] + strX[6] + strY[5])

#Update values and delete variables
sf.setValue(tableField, GPIN)
scurfc.updateRow(sf)
del tableField, scurfc, X, Y, strX, strY, XCentroid, YCentroid, GPIN&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Hope this helps!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 10:18:22 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/convert-centroid-to-gpin/m-p/208657#M16138</guid>
      <dc:creator>MarcNakleh</dc:creator>
      <dc:date>2021-12-11T10:18:22Z</dc:date>
    </item>
    <item>
      <title>Re: Convert centroid to GPIN</title>
      <link>https://community.esri.com/t5/python-questions/convert-centroid-to-gpin/m-p/208658#M16139</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Marc,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you very much for the assistance and, more importantly, the code example.&amp;nbsp; I wasn't aware,as I am quite new to Python, that you did not have to simply call the individual characters from the string, and not have to slice them.&amp;nbsp; That is most helpful for future reference.&amp;nbsp; I was aware that SearchCursor was read-only.&amp;nbsp; The updating aspect is what has stymied me.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have been trying to get the output of my operation to write to the table, and again, my limited Python knowledge, I wasn't able to figure out how to take what I had created and export it out, without running through another set of loops. All my attempts have not worked. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I used repr() to turn the numbers into strings, as per a few things in the help documents, but the str() function appears to do the same job.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I tried your code in PythonWin and Field Calculator, and they both failed on the setValue() function.&amp;nbsp; I realized that I needed to run something else, but it seems that my idea isn't going to work.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Three questions:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1: Do I need to run the setValue() function within another loop (as per my code below) or is there another way execute it that I am missing?&amp;nbsp; I have looked online, but there do not seem to be that many examples of what I am trying to accomplish.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2: Will I have to use an array and iterate it so I can get the correct value to load into the correct field?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3: If not, and using another loop writes the last value to each field, how will I go about loading the correct value into each subsequent field?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My current code, with your changes:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;import arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;from arcpy import env&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;import os&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;env.workspace=r'***\Default.gdb'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#set local variables&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;inFeatures = 'Feature Class'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;XCentroid='xCentroid'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;YCentroid='yCentroid'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;tableField='GPIN2'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#Load values into Variables&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;scurfc = arcpy.SearchCursor(inFeatures)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ucurfc = arcpy.UpdateCursor(inFeatures)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for sf in scurfc:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;....strX = repr(sf.getValue(XCentroid))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;....strY = repr(sf.getValue(YCentroid))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;....GPIN = (strX[2] + strY[1] + strX[3] + strY[2] + "-" +&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strX[4] + strY[3] + "-" +&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strX[5] + strY[4] + strX[6] + strY[5])&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#Update values and delete variables - (This only writes the last value, I am guessing because it only sees the end of the list?)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for uc in ucurfc:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;....uc.setValue(tableField, GPIN)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;....ucurfc.updateRow(uc)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;del tableField, scurfc, ucurfc, strX, strY, XCentroid, YCentroid, GPIN&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Again, thank you very much for your reply and input.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 14 Sep 2011 20:06:21 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/convert-centroid-to-gpin/m-p/208658#M16139</guid>
      <dc:creator>DarrenJones</dc:creator>
      <dc:date>2011-09-14T20:06:21Z</dc:date>
    </item>
    <item>
      <title>Re: Convert centroid to GPIN</title>
      <link>https://community.esri.com/t5/python-questions/convert-centroid-to-gpin/m-p/208659#M16140</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;hahaha this might be because I gave you sloppy code. Apologies!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is the proper code that I have just retested (but with different variable values.) The changes I made are indicated by comments&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;import arcpy
import os

#set local variables
inFeatures = 'Feature Class'
XCentroid = 'xCentroid'
YCentroid = 'yCentroid'
tableField = 'GPIN2'

#Load values into Variables
scurfc = arcpy.UpdateCursor(inFeatures)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # UpdateCursor needs to be called, not SearchCursor
for sf in scurfc:
&amp;nbsp;&amp;nbsp;&amp;nbsp; strX = repr(sf.getValue(XCentroid))
&amp;nbsp;&amp;nbsp;&amp;nbsp; strY = repr(sf.getValue(YCentroid))
&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIN = (strX[2] + strY[1] + strX[3] + strY[2] + "-" +
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strX[4] + strY[3] + "-" +
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strX[5] + strY[4] + strX[6] + strY[5])

&amp;nbsp;&amp;nbsp;&amp;nbsp; #Update values and delete variables
&amp;nbsp;&amp;nbsp;&amp;nbsp; sf.setValue(tableField, GPIN)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # setValue and updateRow need to be called IN the loop
&amp;nbsp;&amp;nbsp;&amp;nbsp; scurfc.updateRow(sf)
del tableField, scurfc, strX, strY, XCentroid, YCentroid, GPIN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # X and Y no longer exist, so there shouldn't be an attempt to delete them.
&lt;/PRE&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I tend not to use repr() as it's a bit less common and it has some funky properties in limit cases (like returning hex values for non-Unicode strings) but you are right: it does do the job here.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In answer to your questions:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;setValue is called inline of the loop cycling through the rows (which is the for sf in scurfc line.) The process is usually as follows for updating values based on other values in a table:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1) Cycle through rows, one by one&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2) Get input from the value of a given column on the current row (like the &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;sf.getValue(XCentroid)&lt;/SPAN&gt;&lt;SPAN&gt; line in the code)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3) Do calculations to get the output value for the current row (like your &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;GPIN = expression&lt;/SPAN&gt;&lt;SPAN&gt; line)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;4) Write value to the output field of the current row (this is the &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;sf.setValue(tableField, GPIN)&lt;/SPAN&gt;&lt;SPAN&gt; line)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;5) Ask the table to update the current row so that the values are written to the actual table (this is the &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;scurfc.updateRow(sf)&lt;/SPAN&gt;&lt;SPAN&gt; line)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;6) Rinse, repeat&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;As you can see, these steps need to be done for each row, which is why everything is inside the "for sf in scurfc" loop. There's no need to loop a second time, or write the values to an array, as the values are updated directly into the table, one row at a time.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Cheers,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Marc&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 10:18:24 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/convert-centroid-to-gpin/m-p/208659#M16140</guid>
      <dc:creator>MarcNakleh</dc:creator>
      <dc:date>2021-12-11T10:18:24Z</dc:date>
    </item>
    <item>
      <title>Re: Convert centroid to GPIN</title>
      <link>https://community.esri.com/t5/python-questions/convert-centroid-to-gpin/m-p/208660#M16141</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;No worries Marc! &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I should have seen the cursor type change. &lt;span class="lia-unicode-emoji" title=":face_with_open_mouth:"&gt;😮&lt;/span&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;That worked like a champ in both PythonWin and in the Python console, but for some reason it is having issues in the Field Calculator. *shrug*&amp;nbsp; I can handle that part by just running it from a script tied to a button...that'll be easier for my users anyway. My next step is to have it read the geometry directly and I think I know how that can be accomplished.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you very much for your help.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Sep 2011 13:32:35 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/convert-centroid-to-gpin/m-p/208660#M16141</guid>
      <dc:creator>DarrenJones</dc:creator>
      <dc:date>2011-09-15T13:32:35Z</dc:date>
    </item>
    <item>
      <title>Re: Convert centroid to GPIN</title>
      <link>https://community.esri.com/t5/python-questions/convert-centroid-to-gpin/m-p/208661#M16142</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Darren,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;No problem at all!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The only thing I would add is that the Field Calculator works a bit differently from the other environments you mentioned. The Field Calculator itself actually functions as an Update Cursor, so there's no need to scroll through values one row at a time: Field Calculator will do that for you!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In fact, the code would look much simpler (though there is usually a need to separate the bulk of the code into a function under Code Block so as not to clutter the one-line Expression field)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
########
# GPIN2 = #
########
compile_GPIN(!XCentroid!, !YCentroid!)


########################
# Code Block / Pre-Logic Script Code#
########################
def compile_GPIN(XCentroid, YCentroid):&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; strX = str(XCentroid)
&amp;nbsp;&amp;nbsp;&amp;nbsp; strY = str(YCentroid)
&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIN = (strX[2] + strY[1] + strX[3] + strY[2] + "-" +
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strX[4] + strY[3] + "-" +
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strX[5] + strY[4] + strX[6] + strY[5])
&amp;nbsp;&amp;nbsp;&amp;nbsp; return GPIN&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The !XCentroid! and !YCentroid! passed to the compile_GPIN function keep sending the appropriate values for those fields, one row at a time. And, for each row, the 'return' sends the GPIN value back to the field to be written, one row at a time.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best of luck in the rest of your program!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Marc&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 10:18:27 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/convert-centroid-to-gpin/m-p/208661#M16142</guid>
      <dc:creator>MarcNakleh</dc:creator>
      <dc:date>2021-12-11T10:18:27Z</dc:date>
    </item>
    <item>
      <title>Re: Convert centroid to GPIN</title>
      <link>https://community.esri.com/t5/python-questions/convert-centroid-to-gpin/m-p/208662#M16143</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Once again, thank you Marc!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have a lot to learn and your assistance has put me on the right path.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Darren&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Sep 2011 14:46:36 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/convert-centroid-to-gpin/m-p/208662#M16143</guid>
      <dc:creator>DarrenJones</dc:creator>
      <dc:date>2011-09-15T14:46:36Z</dc:date>
    </item>
  </channel>
</rss>

