Question

Published parameter "Folder (existing)" changes back slash to forward slash.

  • 10 January 2020
  • 5 replies
  • 42 views

Badge

Occasionally the Folder (existing) parameter will change a backslash in the folder path to a forward slash when the feature is is shown in the table. This creates a major problem for reading, writing and comparing to this folder. Is there anyway to make sure this doesnt happen?


5 replies

Userlevel 4

Can you give a concrete example why this is an issue? Recent versions of Windows accepts both backslashes and forward slashes in paths.

You can of course also use a StringPairReplacer to normalize the slashes in your paths.

Badge

Can you give a concrete example why this is an issue? Recent versions of Windows accepts both backslashes and forward slashes in paths.

You can of course also use a StringPairReplacer to normalize the slashes in your paths.

@david_r , thanks for your reply. I use a tester in FME to test various path directories against each other. Sometimes there is a forward slash and sometimes there isnt.

I will use the StringPairReplacer as per your recommendation (or a StringReplacer).

I was just wondering if you know why this happens? I cant figure out what the reason behind it is, it seems random.

Thanks again,

Philip

Userlevel 4

@david_r , thanks for your reply. I use a tester in FME to test various path directories against each other. Sometimes there is a forward slash and sometimes there isnt.

I will use the StringPairReplacer as per your recommendation (or a StringReplacer).

I was just wondering if you know why this happens? I cant figure out what the reason behind it is, it seems random.

Thanks again,

Philip

I don't know, but I suspect that it's linked to certain modules in FME that are trying to be operating system agnostic.

This was causing me grief too. I was trying to pass a folder containing a file geodatabase parent path as a parameter to arcpy using a system caller.

 

Its all down to FME automatically replacing the beginning of paths within a workspace which match the workspaces's folder with $(FME_MF_DIR).

Documented here: https://community.safe.com/s/article/fme-mf-dir-environment-variable

 

Unfortunately the FME parameter adds a trailing forward slash onto the end of the $(FME_MF_DIR) parameter, even on windows.

 

My user Parameter containing desired Path for Geodatabase folder 

$(TemporaryGeoDatabaseLocation) = D:\\BatchProcesses\\ServiceArea\\TemporaryData

 

My FME workspace was in D:\\BatchProcesses\\ServiceArea\\

 

So $(FME_MF_DIR) = D:\\BatchProcesses\\ServiceArea/

Causing the parameter to be rewritten as: $(FME_MF_DIR)TemporaryData

 

But get evaluated as D:\\BatchProcesses\\ServiceArea/TemporaryData 

 

This was not compatible with arcpy when passed via a system caller in my use case.

 

After much digging about here is my workaround:

 

Option 1: This is a poor solution as it is hardcoded in every instance. Use the FME_MF_DIR parameter and TrimRight command to strip the trailing backslash on the workspace folder and hardcode "\\TemporaryData" into any use of the folder.

 

@TrimRight($(FME_MF_DIR),"//")\\TemporaryData

 

 

Option 2: Wrap any use of your original parameter with a string replacer to change any forwardslashes back to a backslash.

 

@ReplaceString($(TemporaryGeoDatabaseLocation),"/",\\,caseSensitive=TRUE)

 

Note: the backslash is an escape character and must not be included in double quotes as it will escape the ending quote and cause an error.

 

Userlevel 4

This was causing me grief too. I was trying to pass a folder containing a file geodatabase parent path as a parameter to arcpy using a system caller.

 

Its all down to FME automatically replacing the beginning of paths within a workspace which match the workspaces's folder with $(FME_MF_DIR).

Documented here: https://community.safe.com/s/article/fme-mf-dir-environment-variable 

 

Unfortunately the FME parameter adds a trailing forward slash onto the end of the $(FME_MF_DIR) parameter, even on windows.

 

My user Parameter containing desired Path for Geodatabase folder 

$(TemporaryGeoDatabaseLocation) = D:\BatchProcesses\ServiceArea\TemporaryData

 

My FME workspace was in D:\BatchProcesses\ServiceArea\

 

So $(FME_MF_DIR) = D:\BatchProcesses\ServiceArea/

Causing the parameter to be rewritten as: $(FME_MF_DIR)TemporaryData

 

But get evaluated as D:\BatchProcesses\ServiceArea/TemporaryData 

 

This was not compatible with arcpy when passed via a system caller in my use case.

 

After much digging about here is my workaround:

 

Option 1: This is a poor solution as it is hardcoded in every instance. Use the FME_MF_DIR parameter and TrimRight command to strip the trailing backslash on the workspace folder and hardcode "\TemporaryData" into any use of the folder.

 

@TrimRight($(FME_MF_DIR),"//")\TemporaryData

 

 

Option 2: Wrap any use of your original parameter with a string replacer to change any forwardslashes back to a backslash.

 

@ReplaceString($(TemporaryGeoDatabaseLocation),"/",\,caseSensitive=TRUE)

 

Note: the backslash is an escape character and must not be included in double quotes as it will escape the ending quote and cause an error.

 

There's actually a dedicated helper function in the "fme" Python module for this.

Sample usage:

import fme
 
def get_full_path(feature):
    path = feature.getAttribute('path')
    if path:
        absolute_path = fme.getAbsolutePath(path)
        feature.setAttribute('absolute_path', absolute_path)

It will read the feature attribute "path" and return "absolute_path". Sample input:

$(FME_MF_DIR)\test\\123/full\path/

Sample output:

C:\Users\username\AppData\Local\Temp\test\123\full\path

 

Reply