Skip to main content
replaced http://gis.stackexchange.com/ with https://gis.stackexchange.com/
Source Link

I'm trying to string together a field calculator script that will populate all the records of a field at once based upon values in a number of fields. I can't even get the first part of the command to work and can't figure out how to get all the other conditions to fit in.

Here's a simplified version:

NewFIELD: the field I would like to update

Fields = COVER1 and COVER2 (values are three letter codes) and LANDUSE (Values are WET, FOR, COM, RES...). There are other fields I'll be selecting on but for an initial example this should do.
One complication is that there is some overlap between results depending upon how one selects the records. So one record (polygon) could fall into two Forest/Landcover groups (selected first by species composition and secondly by LANDUSE) but I may want to update this new field with only the first Forest class. So I need to do the selections sequentially and explicitly exlude records that have already been defined.

IF [COVER1] = "WWW" OR [COVER1] = "OWW" OR [COVER1] = "SFW" OR [COVER1] = "WAT" THEN
  F2 = "Wetland"
ELSE IF ([COVER2] = "WS" OR [COVER2] = "BF" OR [COVER2] = "CE" OR [COVER2] = "LA") AND
[DRAINTYPE] ="IMPERFECT" OR [DRAINTYPE] ="POOR") AND [NewFIELD] <> "Wetland"
  F2 = "Forest1"

The first statement updates NewFIELD with "Wetland" for all those records to which it applies. The second statement will apply to some of those that were selected in the first statement but I want them to remain as "Wetland"

As mentioned, I can't even get a simple statement to work so I suspect my initial syntax is horribly wrong.

My first try looks like this and didn't work:

dim f2
if [COVER1] = "SDW" OR [COVER1] ="BSB" then
  f2 = "Beach"
end if

So, any thoughts on how I would approach this? I can do it by selecting all applicable records using Select by Attributes and then updating NewFIELD (doing this 9 or ten times) but it'd be nice to do this all at once. And I'm not familiar with Python so don't know where to start with that. But I'd be interested in trying it.

Looking at this thread (If/then VBScript/Python code equivalent to SQL IN ('x','y',z') expression in ArcGIS Field Calculator?If/then VBScript/Python code equivalent to SQL IN ('x','y',z') expression in ArcGIS Field Calculator?) it looks like I may be able to use the SQL IN function but I'm still unclear about it.

I'm trying to string together a field calculator script that will populate all the records of a field at once based upon values in a number of fields. I can't even get the first part of the command to work and can't figure out how to get all the other conditions to fit in.

Here's a simplified version:

NewFIELD: the field I would like to update

Fields = COVER1 and COVER2 (values are three letter codes) and LANDUSE (Values are WET, FOR, COM, RES...). There are other fields I'll be selecting on but for an initial example this should do.
One complication is that there is some overlap between results depending upon how one selects the records. So one record (polygon) could fall into two Forest/Landcover groups (selected first by species composition and secondly by LANDUSE) but I may want to update this new field with only the first Forest class. So I need to do the selections sequentially and explicitly exlude records that have already been defined.

IF [COVER1] = "WWW" OR [COVER1] = "OWW" OR [COVER1] = "SFW" OR [COVER1] = "WAT" THEN
  F2 = "Wetland"
ELSE IF ([COVER2] = "WS" OR [COVER2] = "BF" OR [COVER2] = "CE" OR [COVER2] = "LA") AND
[DRAINTYPE] ="IMPERFECT" OR [DRAINTYPE] ="POOR") AND [NewFIELD] <> "Wetland"
  F2 = "Forest1"

The first statement updates NewFIELD with "Wetland" for all those records to which it applies. The second statement will apply to some of those that were selected in the first statement but I want them to remain as "Wetland"

As mentioned, I can't even get a simple statement to work so I suspect my initial syntax is horribly wrong.

My first try looks like this and didn't work:

dim f2
if [COVER1] = "SDW" OR [COVER1] ="BSB" then
  f2 = "Beach"
end if

So, any thoughts on how I would approach this? I can do it by selecting all applicable records using Select by Attributes and then updating NewFIELD (doing this 9 or ten times) but it'd be nice to do this all at once. And I'm not familiar with Python so don't know where to start with that. But I'd be interested in trying it.

Looking at this thread (If/then VBScript/Python code equivalent to SQL IN ('x','y',z') expression in ArcGIS Field Calculator?) it looks like I may be able to use the SQL IN function but I'm still unclear about it.

I'm trying to string together a field calculator script that will populate all the records of a field at once based upon values in a number of fields. I can't even get the first part of the command to work and can't figure out how to get all the other conditions to fit in.

Here's a simplified version:

NewFIELD: the field I would like to update

Fields = COVER1 and COVER2 (values are three letter codes) and LANDUSE (Values are WET, FOR, COM, RES...). There are other fields I'll be selecting on but for an initial example this should do.
One complication is that there is some overlap between results depending upon how one selects the records. So one record (polygon) could fall into two Forest/Landcover groups (selected first by species composition and secondly by LANDUSE) but I may want to update this new field with only the first Forest class. So I need to do the selections sequentially and explicitly exlude records that have already been defined.

IF [COVER1] = "WWW" OR [COVER1] = "OWW" OR [COVER1] = "SFW" OR [COVER1] = "WAT" THEN
  F2 = "Wetland"
ELSE IF ([COVER2] = "WS" OR [COVER2] = "BF" OR [COVER2] = "CE" OR [COVER2] = "LA") AND
[DRAINTYPE] ="IMPERFECT" OR [DRAINTYPE] ="POOR") AND [NewFIELD] <> "Wetland"
  F2 = "Forest1"

The first statement updates NewFIELD with "Wetland" for all those records to which it applies. The second statement will apply to some of those that were selected in the first statement but I want them to remain as "Wetland"

As mentioned, I can't even get a simple statement to work so I suspect my initial syntax is horribly wrong.

My first try looks like this and didn't work:

dim f2
if [COVER1] = "SDW" OR [COVER1] ="BSB" then
  f2 = "Beach"
end if

So, any thoughts on how I would approach this? I can do it by selecting all applicable records using Select by Attributes and then updating NewFIELD (doing this 9 or ten times) but it'd be nice to do this all at once. And I'm not familiar with Python so don't know where to start with that. But I'd be interested in trying it.

Looking at this thread (If/then VBScript/Python code equivalent to SQL IN ('x','y',z') expression in ArcGIS Field Calculator?) it looks like I may be able to use the SQL IN function but I'm still unclear about it.

deleted 28 characters in body; edited tags; edited tags
Source Link
PolyGeo
  • 65.4k
  • 29
  • 114
  • 345

I'm trying to string together a field calculator script that will populate all the records of a field at once based upon values in a number of fields. I can't even get the first part of the command to work and can't figure out how to get all the other conditions to fit in.

Here's a simplified version:

NewFIELD: the field I would like to update

Fields = COVER1 and COVER2 (values are three letter codes) and LANDUSE (Values are WET, FOR, COM, RES...). There are other fields I'll be selecting on but for an initial example this should do.
One complication is that there is some overlap between results depending upon how one selects the records. So one record (polygon) could fall into two Forest/Landcover groups (selected first by species composition and secondly by LANDUSE) but I may want to update this new field with only the first Forest class. So I need to do the selections sequentially and explicitly exlude records that have already been defined.

IF [COVER1] = "WWW" OR [COVER1] = "OWW" OR [COVER1] = "SFW" OR [COVER1] = "WAT" THEN
  F2 = "Wetland"
ELSE IF ([COVER2] = "WS" OR [COVER2] = "BF" OR [COVER2] = "CE" OR [COVER2] = "LA") AND
[DRAINTYPE] ="IMPERFECT" OR [DRAINTYPE] ="POOR") AND [NewFIELD] <> "Wetland"
  F2 = "Forest1"

The first statement updates NewFIELD with "Wetland" for all those records to which it applies. The second statement will apply to some of those that were selected in the first statement but I want them to remain as "Wetland"

As mentioned, I can't even get a simple statement to work so I suspect my initial syntax is horribly wrong.

My first try looks like this and didn't work:

dim f2
if [COVER1] = "SDW" OR [COVER1] ="BSB" then
  f2 = "Beach"
end if

So, any thoughts on how I would approach this? I can do it by selecting all applicable records using Select by Attributes and then updating NewFIELD (doing this 9 or ten times) but it'd be nice to do this all at once. And I'm not familiar with Python so don't know where to start with that. But I'd be interested in trying it.

Looking at this thread (If/then VBScript/Python code equivalent to SQL IN ('x','y',z') expression in ArcGIS Field Calculator?) it looks like I may be able to use the SQL IN function but I'm still unclear about it.

Thanks in advance. Phil

I'm trying to string together a field calculator script that will populate all the records of a field at once based upon values in a number of fields. I can't even get the first part of the command to work and can't figure out how to get all the other conditions to fit in.

Here's a simplified version:

NewFIELD: the field I would like to update

Fields = COVER1 and COVER2 (values are three letter codes) and LANDUSE (Values are WET, FOR, COM, RES...). There are other fields I'll be selecting on but for an initial example this should do.
One complication is that there is some overlap between results depending upon how one selects the records. So one record (polygon) could fall into two Forest/Landcover groups (selected first by species composition and secondly by LANDUSE) but I may want to update this new field with only the first Forest class. So I need to do the selections sequentially and explicitly exlude records that have already been defined.

IF [COVER1] = "WWW" OR [COVER1] = "OWW" OR [COVER1] = "SFW" OR [COVER1] = "WAT" THEN
  F2 = "Wetland"
ELSE IF ([COVER2] = "WS" OR [COVER2] = "BF" OR [COVER2] = "CE" OR [COVER2] = "LA") AND
[DRAINTYPE] ="IMPERFECT" OR [DRAINTYPE] ="POOR") AND [NewFIELD] <> "Wetland"
  F2 = "Forest1"

The first statement updates NewFIELD with "Wetland" for all those records to which it applies. The second statement will apply to some of those that were selected in the first statement but I want them to remain as "Wetland"

As mentioned, I can't even get a simple statement to work so I suspect my initial syntax is horribly wrong.

My first try looks like this and didn't work:

dim f2
if [COVER1] = "SDW" OR [COVER1] ="BSB" then
  f2 = "Beach"
end if

So, any thoughts on how I would approach this? I can do it by selecting all applicable records using Select by Attributes and then updating NewFIELD (doing this 9 or ten times) but it'd be nice to do this all at once. And I'm not familiar with Python so don't know where to start with that. But I'd be interested in trying it.

Looking at this thread (If/then VBScript/Python code equivalent to SQL IN ('x','y',z') expression in ArcGIS Field Calculator?) it looks like I may be able to use the SQL IN function but I'm still unclear about it.

Thanks in advance. Phil

I'm trying to string together a field calculator script that will populate all the records of a field at once based upon values in a number of fields. I can't even get the first part of the command to work and can't figure out how to get all the other conditions to fit in.

Here's a simplified version:

NewFIELD: the field I would like to update

Fields = COVER1 and COVER2 (values are three letter codes) and LANDUSE (Values are WET, FOR, COM, RES...). There are other fields I'll be selecting on but for an initial example this should do.
One complication is that there is some overlap between results depending upon how one selects the records. So one record (polygon) could fall into two Forest/Landcover groups (selected first by species composition and secondly by LANDUSE) but I may want to update this new field with only the first Forest class. So I need to do the selections sequentially and explicitly exlude records that have already been defined.

IF [COVER1] = "WWW" OR [COVER1] = "OWW" OR [COVER1] = "SFW" OR [COVER1] = "WAT" THEN
  F2 = "Wetland"
ELSE IF ([COVER2] = "WS" OR [COVER2] = "BF" OR [COVER2] = "CE" OR [COVER2] = "LA") AND
[DRAINTYPE] ="IMPERFECT" OR [DRAINTYPE] ="POOR") AND [NewFIELD] <> "Wetland"
  F2 = "Forest1"

The first statement updates NewFIELD with "Wetland" for all those records to which it applies. The second statement will apply to some of those that were selected in the first statement but I want them to remain as "Wetland"

As mentioned, I can't even get a simple statement to work so I suspect my initial syntax is horribly wrong.

My first try looks like this and didn't work:

dim f2
if [COVER1] = "SDW" OR [COVER1] ="BSB" then
  f2 = "Beach"
end if

So, any thoughts on how I would approach this? I can do it by selecting all applicable records using Select by Attributes and then updating NewFIELD (doing this 9 or ten times) but it'd be nice to do this all at once. And I'm not familiar with Python so don't know where to start with that. But I'd be interested in trying it.

Looking at this thread (If/then VBScript/Python code equivalent to SQL IN ('x','y',z') expression in ArcGIS Field Calculator?) it looks like I may be able to use the SQL IN function but I'm still unclear about it.

Tweeted twitter.com/#!/StackGIS/status/84915192974155776
code formatting
Source Link
Derek Swingley
  • 14.5k
  • 2
  • 45
  • 63

I'm trying to string together a field calculator script that will populate all the records of a field at once based upon values in a number of fields. I can't even get the first part of the command to work and can't figure out how to get all the other conditions to fit in.

Here's a simplified version:

NewFIELD: the field I would like to update

Fields = COVER1 and COVER2 (values are three letter codes) and LANDUSE (Values are WET, FOR, COM, RES...). There are other fields I'll be selecting on but for an initial example this should do.
One complication is that there is some overlap between results depending upon how one selects the records. So one record (polygon) could fall into two Forest/Landcover groups (selected first by species composition and secondly by LANDUSE) but I may want to update this new field with only the first Forest class. So I need to do the selections sequentially and explicitly exlude records that have already been defined.

IF [COVER1] = "WWW" OR [COVER1] = "OWW" OR [COVER1] = "SFW" OR [COVER1] = "WAT" THEN

F2 = "Wetland"

ELSE IF

([COVER2] = "WS" OR [COVER2] = "BF" OR [COVER2] = "CE" OR [COVER2] = "LA") AND

[DRAINTYPE] ="IMPERFECT" OR [DRAINTYPE] ="POOR") AND [NewFIELD] <> "Wetland"

F2 = "Forest1"

(apologies for the bad block quotes)

IF [COVER1] = "WWW" OR [COVER1] = "OWW" OR [COVER1] = "SFW" OR [COVER1] = "WAT" THEN
  F2 = "Wetland"
ELSE IF ([COVER2] = "WS" OR [COVER2] = "BF" OR [COVER2] = "CE" OR [COVER2] = "LA") AND
[DRAINTYPE] ="IMPERFECT" OR [DRAINTYPE] ="POOR") AND [NewFIELD] <> "Wetland"
  F2 = "Forest1"

The first statement updates NewFIELD with "Wetland" for all those records to which it applies. The second statement will apply to some of those that were selected in the first statement but I want them to remain as "Wetland"

As mentioned, I can't even get a simple statement to work so I suspect my initial syntax is horribly wrong.

My first try looks like this and didn't work:

dim f2

if [COVER1] = "SDW" OR [COVER1] ="BSB" then

f2 = "Beach"

end if

dim f2
if [COVER1] = "SDW" OR [COVER1] ="BSB" then
  f2 = "Beach"
end if

So, any thoughts on how I would approach this? I can do it by selecting all applicable records using Select by Attributes and then updating NewFIELD (doing this 9 or ten times) but it'd be nice to do this all at once. And I'm not familiar with Python so don't know where to start with that. But I'd be interested in trying it.

Looking at this thread (If/then VBScript/Python code equivalent to SQL IN ('x','y',z') expression in ArcGIS Field Calculator?) it looks like I may be able to use the SQL IN function but I'm still unclear about it.

Thanks in advance. Phil

I'm trying to string together a field calculator script that will populate all the records of a field at once based upon values in a number of fields. I can't even get the first part of the command to work and can't figure out how to get all the other conditions to fit in.

Here's a simplified version:

NewFIELD: the field I would like to update

Fields = COVER1 and COVER2 (values are three letter codes) and LANDUSE (Values are WET, FOR, COM, RES...). There are other fields I'll be selecting on but for an initial example this should do.
One complication is that there is some overlap between results depending upon how one selects the records. So one record (polygon) could fall into two Forest/Landcover groups (selected first by species composition and secondly by LANDUSE) but I may want to update this new field with only the first Forest class. So I need to do the selections sequentially and explicitly exlude records that have already been defined.

IF [COVER1] = "WWW" OR [COVER1] = "OWW" OR [COVER1] = "SFW" OR [COVER1] = "WAT" THEN

F2 = "Wetland"

ELSE IF

([COVER2] = "WS" OR [COVER2] = "BF" OR [COVER2] = "CE" OR [COVER2] = "LA") AND

[DRAINTYPE] ="IMPERFECT" OR [DRAINTYPE] ="POOR") AND [NewFIELD] <> "Wetland"

F2 = "Forest1"

(apologies for the bad block quotes)

The first statement updates NewFIELD with "Wetland" for all those records to which it applies. The second statement will apply to some of those that were selected in the first statement but I want them to remain as "Wetland"

As mentioned, I can't even get a simple statement to work so I suspect my initial syntax is horribly wrong.

My first try looks like this and didn't work:

dim f2

if [COVER1] = "SDW" OR [COVER1] ="BSB" then

f2 = "Beach"

end if

So, any thoughts on how I would approach this? I can do it by selecting all applicable records using Select by Attributes and then updating NewFIELD (doing this 9 or ten times) but it'd be nice to do this all at once. And I'm not familiar with Python so don't know where to start with that. But I'd be interested in trying it.

Looking at this thread (If/then VBScript/Python code equivalent to SQL IN ('x','y',z') expression in ArcGIS Field Calculator?) it looks like I may be able to use the SQL IN function but I'm still unclear about it.

Thanks in advance. Phil

I'm trying to string together a field calculator script that will populate all the records of a field at once based upon values in a number of fields. I can't even get the first part of the command to work and can't figure out how to get all the other conditions to fit in.

Here's a simplified version:

NewFIELD: the field I would like to update

Fields = COVER1 and COVER2 (values are three letter codes) and LANDUSE (Values are WET, FOR, COM, RES...). There are other fields I'll be selecting on but for an initial example this should do.
One complication is that there is some overlap between results depending upon how one selects the records. So one record (polygon) could fall into two Forest/Landcover groups (selected first by species composition and secondly by LANDUSE) but I may want to update this new field with only the first Forest class. So I need to do the selections sequentially and explicitly exlude records that have already been defined.

IF [COVER1] = "WWW" OR [COVER1] = "OWW" OR [COVER1] = "SFW" OR [COVER1] = "WAT" THEN
  F2 = "Wetland"
ELSE IF ([COVER2] = "WS" OR [COVER2] = "BF" OR [COVER2] = "CE" OR [COVER2] = "LA") AND
[DRAINTYPE] ="IMPERFECT" OR [DRAINTYPE] ="POOR") AND [NewFIELD] <> "Wetland"
  F2 = "Forest1"

The first statement updates NewFIELD with "Wetland" for all those records to which it applies. The second statement will apply to some of those that were selected in the first statement but I want them to remain as "Wetland"

As mentioned, I can't even get a simple statement to work so I suspect my initial syntax is horribly wrong.

My first try looks like this and didn't work:

dim f2
if [COVER1] = "SDW" OR [COVER1] ="BSB" then
  f2 = "Beach"
end if

So, any thoughts on how I would approach this? I can do it by selecting all applicable records using Select by Attributes and then updating NewFIELD (doing this 9 or ten times) but it'd be nice to do this all at once. And I'm not familiar with Python so don't know where to start with that. But I'd be interested in trying it.

Looking at this thread (If/then VBScript/Python code equivalent to SQL IN ('x','y',z') expression in ArcGIS Field Calculator?) it looks like I may be able to use the SQL IN function but I'm still unclear about it.

Thanks in advance. Phil

Source Link
phyllo
  • 181
  • 2
  • 6
Loading