I have modified my Document to text wrapper that functions like Receive packet. Not sure if anyone is really interested in this but since I did post the original method I thought it best for me to post the modified version.
The new version has 2 uses.. 1. To replace Receive packet as it was used in a loop to receive the contents of a document 1 row at a time. 2. To load the contents of a document with a specified EOL character regardless of platform, with or without an existing header row Also changed is the requirement to pass the break mode parameter (EOL) when using as a replacement for Receive Packet. Only the first 2 parameters are now passed. I hope someone finds this useful. John // Method: ReceivePacket_DocToText (->pathToDocumentVariable;->VariableToHoldDocContents{;BreakMode}{;RemoveTopRows})-> rowText | {header text | document text} // ---------------------------------------------------- // Created by: John Baughman // Date and time: 34/23/20, 1:05 PM // ---------------------------------------------------- // Description // Replacement for Receive Packet using Document To Text // Parameters C_POINTER($1;$pathPtr) //$1 is a pointer to the variable holding the path to the document. //In a repeat loop you can put an empty string in the variable to allow the user to pick the document using Document Select. //The variable will be updated to contain the chosen path which will prevent the document from being loaded again //If the user cancels the Select Document, $rowText:="", and $documentTextPtr->:="" C_POINTER($2;$documentTextPtr) //Pass an empty text variable in the first call and it will be loaded from the document with Document to text. //subsequent calls will not reload the document as the variable will no longer be empty. Instead the wrapper will use this variable as passed in ($2) //The variable will be loaded with the document contents minus the row being returned. C_TEXT($0;$rowText) //$RowText will hold the first row in the $DocumentTextPtr variable and returned in $0. //The first row in the $DocumentTextPtr variable wil be removed. //If you pass more than 2 parameters $0 will be the document contents or removed top rows as explained in the following parameters //The following parameters are used only if you just want the contents of the document. DO NOT USE IN A LOOP C_LONGINT($3;$breakMode) //Document to Text will convert the EOL character in the document to the passed desired break mode constants... //Document with CR //Document with CRLF //Document with LF //Document with native format C_LONGINT($4;$removeTopRowscount) //The number of top rows to be removed from the returned contents. //The document contents with or without top rows removed will be returned in the $documentTextPtr variable ($2) //The removed lines will be returned in $0 //If you want the whole document pass 0 in $4. In the case both $0 and the $documentTextPtr variable ($2) will contain the whole document //The EOL character(s) will be the requested characters as passed in $3 If (False) //Example Calls //With regard to EOL characters, the following examples will work on both Mac and Windows platforms //----------- //To replace Recieve Packet getting each row one at a time in a loop C_TEXT($TextValue;$path) $TextValue:="" $path:="" Repeat $row:=ReceivePacket_DocToText (->$path;->$TextValue) //handle the row Until (ok=0) //----------- //To get the whole document contents with CRs as the EOL characters C_TEXT($TextValue;$path) $DocumentText:="" $path:="" $DocumentText:=ReceivePacket_DocToText (->$path;->$DocumentText;Document with CR;0) //Get the whole document //$DocumentText = whole document with CRs including a header row if it exists //Note: In this context $2 can be a nill pointer //----------- //To get the document contents WITHOUT the header row, with CRs as the EOL characters C_TEXT($TextValue;$path) $DocumentText:="" $path:="" $removedRows:=ReceivePacket_DocToText (->$path;->$DocumentText;Document with CR;1) //Get the whole document without the header row. To remove 1 top rows, pass 1, for 2 rows pass 2, etc. //$romovedRows is the header row and $DocumentText contains the document content without the header row, both with CRs End if // ---------------------------------------------------- $pathPtr:=$1 $DocumentTextPtr:=$2 If (Is nil pointer($2)) $documentText:="" $DocumentTextPtr:=->$documentText End if If (Count parameters=2) $breakMode:=Document with CR //The wrapper will always use CR for Recieve packet functionality Else //Document text with EOL characters is being requested $breakMode:=$3 $removeTopRowscount:=$4 End if $rowText:="" If ($pathPtr->="") //They want to select the document ARRAY TEXT($aSelected;0) $path:=Select document("";"*";"";0;$aSelected) If (ok=1) $pathPtr->:=$aSelected{1} End if End if If (ok=1) If ($DocumentTextPtr->="") | (Count parameters=4) //Document has not yet been loaded If (Is Windows) $documentTextPtr->:=Document to text($pathPtr->;"ANSI_X3.4-1986";$breakMode) $stopCharacter:="\r\n" Else $documentTextPtr->:=Document to text($pathPtr->;"MacRoman";$breakMode) $stopCharacter:="\r" End if End if Case of : ($breakMode=Document with CR) $stopCharacter:="\r" : ($breakMode=Document with LF) $stopCharacter:="\n" : ($breakMode=Document with CRLF) $stopCharacter:="\r\n" //else //native format... $stopCharacter was set above following document to text End case If (Count parameters=2) If (Position($stopCharacter;$DocumentTextPtr->)=0) //Assumes that this is the last row without a EOL character. Otherwise it is an error $rowText:=$documentTextPtr-> //return what is left ok:=0 //we are done. Recieve packet sets ok to 0 when done in a repeat loop so I am doing the same here $documentTextPtr->:="" Else $rowText:=Substring($documentTextPtr->;1;Position($stopCharacter;$documentTextPtr->)-1) //return the first row without the stop character $documentTextPtr->:=Replace string($documentTextPtr->;$rowText+$stopCharacter;"") End if $0:=$rowText Else If ($removeTopRowscount=0) $0:=$documentTextPtr-> Else For ($i;1;$removeTopRowscount) If (Position($stopCharacter;$documentTextPtr->)#0) $rowToRemove:=Substring($documentTextPtr->;1;Position($stopCharacter;$documentTextPtr->)) $rowText:=$rowText+$rowToRemove $documentTextPtr->:=Replace string($documentTextPtr->;$rowToRemove;"") End if End for $0:=$rowText End if End if Else $DocumentTextPtr->:="" $0:=$rowText End if ********************************************************************** 4D Internet Users Group (4D iNUG) Archive: http://lists.4d.com/archives.html Options: https://lists.4d.com/mailman/options/4d_tech Unsub: mailto:4d_tech-unsubscr...@lists.4d.com **********************************************************************