1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 <2017> 2018 2019 2020 2021 2022 2023 2024 | Index | 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 <2017> 2018 2019 2020 2021 2022 2023 2024 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Re: string fanout or stringout after conditional check? |
From: | Jeong Han Lee <[email protected]> |
To: | "Zimoch Dirk (PSI)" <[email protected]> |
Cc: | Eric Norum <[email protected]>, "[email protected]" <[email protected]> |
Date: | Tue, 23 May 2017 16:31:58 +0200 |
Hi, For the closing purpose, I would like to reply this list.I found the way to do what I need with aSub record. And I've learned other things than what I need as usual.
Anyway, always thank you. Han On 05/18/2017 11:39 PM, Zimoch Dirk (PSI) wrote:
The guard is not strictly necessary. StreamDevice will not overrun the buffer. In recent versions I have improved string scanning: for example "%#s" reads strings containing white space. But maybe you want to do more parsing: in "user,%d,%(\$1)s"; This in an I/O Intr scanned record fetches the number whenever a line starting with "user," is received and sends the last part to a different record. Dirk Gruss DirkAm 18.05.2017 um 17:22 schrieb Jeong Han Lee <[email protected]>: Hi Eric,On 05/18/2017 05:08 PM, Eric Norum wrote: To guard against buffer overrun issues it’s best to specify a maximum length in the protocol entry: read_raw { in “%39c"; }Thanks for your comments.Or, if the input terminator is set to a single ‘\r’ or ‘\n’ and the device sends a "\r\n” you could use: read_raw { in “%39[^\r\n]"; }By the way, I have the terminator in "st.cmd" as follows: asynOctetSetInputEos("L0", 0, "\r\n") Thanks, HanOn May 18, 2017, at 6:37 AM, Jeong Han Lee <[email protected] <mailto:[email protected]>> wrote: I have the bar code scanner, so, the string input is the arbitrary ascii and numbers from bar codes, generated by myself, whenever I scan it. For example, case 1 : user,123456789,U002C007 case 2 : ABCDEFGHIZ0123456789 case 3 : office,248795493,M01B21 case 4 : .... case N : SUBMIT Note that case 1..N-1 can be done without order. The scanner has a typical RS232 connection. I wrote the very simple IOC with asyn and Stream. It has only one record and one function in db and proto file as follows: --- snip snip --- record(stringin, "$(SYSDEV)RawScanData") { field(DESC, "RAW Scanned data") field(DTYP, "stream") field( INP, "@scanner.proto read_raw $(PORT)") field(SCAN, "I/O Intr") field(PINI, "YES") } read_raw { in "%s"; } --- snip snip ---------- Is this enough? Thanks, Han
-- Eric Norum [email protected] <mailto:[email protected]>