1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

User error with low level file* commands

Discussion in 'Support' started by CSGalloway@nc.rr.com, Mar 22, 2011.

  1. Hi,

    I am not gettign the correct output fro mthe following snippet:

    ========================================================set fn=C:\Charles_Docs\00035212.jpg
    set fh=%@fileopen[%fn,read,b]
    iff %fh == -1 then
    echo file could not be opened
    else
    setdos /x-12456789
    :: 1 All alias expansion
    :: 2 Nested alias expansion only
    :: 3 All variable expansion (includes environment variables, batch file parameters, variable
    :: function evaluation, and alias parameters)
    :: 4 Nested variable expansion only
    :: 5 Multiple commands, conditional commands, and piping (affects the command separator, ||,
    :: &&, |, and |&)
    :: 6 Redirection (affects < , >, >&, >&>, etc.)
    :: 7 Quoting (affects back-quotes [`] and double quotes ["]) and square brackets)
    :: 8 Escape character
    :: 9 Include lists
    set nRes=%@FILESEEK[%fh,0,0]
    iff %nRes == -1 then
    echo File not Seeked: %nRes
    else
    set tst=%@fileread[%fh,12]
    set nLen=%@len[%tst]
    echo Read %nLen bytes....
    :: returns "Read 4 bytes" - not 12
    set fc=%@fileclose[%fh]
    iff %fc == -1 then
    echo File not closed...
    endiff
    endiff
    setdos /x0
    endiff
    unset fn, fh, nRes, tst, fc
    ========================================================
     
  2. vefatica

    Joined:
    May 20, 2008
    Messages:
    7,792
    Likes Received:
    29
    When I tried it on a JPG I have, I got 4 bytes too. It turns out, the first 5
    bytes of the JPG are "FFD8FFE000". Perhaps @FILEREAD[] read more than 4 bytes
    (don't really know) but I'm pretty sure that @LEN[] will interpret the 0x00 as
    the end of a string (thus reporting 4 bytes).

    On Tue, 22 Mar 2011 00:12:41 -0400, CSGalloway@nc.rr.com <>
    wrote:

    |Hi,
    |
    |I am not gettign the correct output fro mthe following snippet:
    |
    |========================================================set fn=C:\Charles_Docs\00035212.jpg
    |set fh=%@fileopen[%fn,read,b]
    |iff %fh == -1 then
    | echo file could not be opened
    |else
    | setdos /x-12456789
    | :: 1 All alias expansion
    | :: 2 Nested alias expansion only
    | :: 3 All variable expansion (includes environment variables, batch file parameters, variable
    | :: function evaluation, and alias parameters)
    | :: 4 Nested variable expansion only
    | :: 5 Multiple commands, conditional commands, and piping (affects the command separator, ||,
    | :: &&, |, and |&)
    | :: 6 Redirection (affects < , >, >&, >&>, etc.)
    | :: 7 Quoting (affects back-quotes [`] and double quotes ["]) and square brackets)
    | :: 8 Escape character
    | :: 9 Include lists
    | set nRes=%@FILESEEK[%fh,0,0]
    | iff %nRes == -1 then
    | echo File not Seeked: %nRes
    | else
    | set tst=%@fileread[%fh,12]
    | set nLen=%@len[%tst]
    | echo Read %nLen bytes....
    | :: returns "Read 4 bytes" - not 12
    | set fc=%@fileclose[%fh]
    | iff %fc == -1 then
    | echo File not closed...
    | endiff
    | endiff
    | setdos /x0
    |endiff
    |unset fn, fh, nRes, tst, fc
    |=======================================================
     
  3. Kachupp

    Joined:
    Aug 9, 2009
    Messages:
    133
    Likes Received:
    0
    Charles I tried you "snippet" with a %1 for FN it worked as I suspected,
    What I don't understand is what your trying to achieve
    BUT ANYWAY... nRES=%@fileseek[%fh,6,0] FFIND /x would be a better way of
    getting the location of the "required text" assuming
    you wanted to find "JFIF"

    The following script shows the translation error clearly mainly with
    PDF's create a temp folder with a bunch binaries and text files.
    .zip, .PDF's, .JPG, .dll, .exe, etc.... and plain text .txt files it
    shows up quickly something's missing!

    cls
    setlocal
    unset /q *
    except (%0) dir /bx . >%@unique[]
    set tmp_file=%@EXECSTR[*DIR /A:-D /H /O:-T /F /X /Z]

    do r=0 to %@lines[%tmp_file]
    set open_%r=%@fileopen[%@line[%tmp_file,%r],r,b]
    %@if[%@isprint[%@fileread[%[open_%r],8]] != 0,echo
    %@format[-15,Text] %@line[%tmp_file,%r],echo %@format[-15,Binary]
    %@line[%tmp_file,%r]]
    echo %@fileclose[%[open_%[r]]] >&nul
    unset /q open*
    enddo
    :
    del /qk *.tmp
    endlocal
    quit

    changing the read location from 8 to 12 changes the results again!!!!


     
  4. Steve Fabian

    Joined:
    May 20, 2008
    Messages:
    3,523
    Likes Received:
    4
    CSGalloway@nc.rr.com:
    ...
    | I am not gettign the correct output fro mthe following snippet:
    ...
    | set tst=%@fileread[%fh,12]
    | set nLen=%@len[%tst]
    | echo Read %nLen bytes....
    | :: returns "Read 4 bytes" - not 12

    Charles:
    I have several alternatives for you.

    1/ Use @FILEREADB - it is intended for reading binary files, OR

    2/ Use @SAFEREAD in Charles Dye's SafeChars.dll plugin, OR

    3/ Use the EXIF utilities to locate and read the fields of interest in the image files. Download is free from www.hugsan.com/EXIFutils/html/features.html, unpaid version has limits of how many fields and files a single invocation can process, but no limit on totals.

    All of these will get you closer to your goal.
    --
    HTH, Steve
     
  5. Charles Dye

    Charles Dye Super Moderator
    Staff Member

    Joined:
    May 20, 2008
    Messages:
    3,279
    Likes Received:
    38
    If it's the null bytes tripping him up, then @FILEREADB is the way to go. SafeChars can't help with that issue; anything which uses null-terminated strings is going to gag on zero bytes.
     
  6. 1/ I want to use TCMD 8 - 12.1 - filereadb is not in the help for 8....

    2/ prefer not to have to use a plugin....

    3/ I have a lot of files with no extensions where my main goal is to write a BTM to examine the files and add the preferred extension. Some will be just text files, HTML files, jpg, gif, whatever "RISS would be if located in the file header, etc...
    ----- Original Message -----
    From: Steve Fabian
    To: CSGalloway@nc.rr.com
    Sent: Tuesday, March 22, 2011 10:40 AM
    Subject: RE: [Support-t-2692] User error with low level file* commands


    CSGalloway@nc.rr.com:
    ...
    | I am not gettign the correct output fro mthe following snippet:
    ...
    | set tst=%@fileread[%fh,12]
    | set nLen=%@len[%tst]
    | echo Read %nLen bytes....
    | :: returns "Read 4 bytes" - not 12

    Charles:
    I have several alternatives for you.

    1/ Use @FILEREADB - it is intended for reading binary files, OR

    2/ Use @SAFEREAD in Charles Dye's SafeChars.dll plugin, OR

    3/ Use the EXIF utilities to locate and read the fields of interest in the image files. Download is free from www.hugsan.com/EXIFutils/html/features.html, unpaid version has limits of how many fields and files a single invocation can process, but no limit on totals.

    All of these will get you closer to your goal.
    --
    HTH, Steve
     
  7. samintz

    samintz Scott Mintz

    Joined:
    May 20, 2008
    Messages:
    1,178
    Likes Received:
    11
    @FILEREAD does not support binary files.
    You have to use @FILEREADB which wasn't in v8. Have you tried
    using the free TCC/LE ?

    -Scott

    CSGalloway@nc.rr.com <>
    wrote on 03/23/2011 05:06:45 PM:


    8....

    to



    commands

    OR



    totals.

     
  8. I guess there is no way to do it in 8? I have all versions to 12.1 of TCMD/TCC
    ----- Original Message -----
    From: samintz
    To: CSGalloway@nc.rr.com
    Sent: Wednesday, March 23, 2011 05:55 PM
    Subject: RE: [Support-t-2692] User error with low level file* commands


    @FILEREAD does not support binary files.
    You have to use @FILEREADB which wasn't in v8. Have you tried
    using the free TCC/LE ?

    -Scott

    CSGalloway@nc.rr.com <>
    wrote on 03/23/2011 05:06:45 PM:



    Quote:
    > CSGalloway@nc.rr.com <>
    > 03/23/2011 05:06 PM
    >
    > Please respond to
    >
    >
    > To
    >
    > Samintz@ra.rockwell.com
    >
    > cc
    >
    > Subject
    >
    > RE: [Support-t-2692] User error with low level file* commands
    >
    > 1/ I want to use TCMD 8 - 12.1 - filereadb is not in the help for

    8....


    Quote:
    >
    > 2/ prefer not to have to use a plugin....
    >
    > 3/ I have a lot of files with no extensions where my main goal is

    to


    Quote:
    > write a BTM to examine the files and add the preferred extension.



    Quote:
    > Some will be just text files, HTML files, jpg, gif, whatever "RISS



    Quote:
    > would be if located in the file header, etc...
    > ----- Original Message -----
    > From: Steve Fabian
    > To: CSGalloway@nc.rr.com
    > Sent: Tuesday, March 22, 2011 10:40 AM
    > Subject: RE: [Support-t-2692] User error with low level file*

    commands


    Quote:
    >
    >
    > CSGalloway@nc.rr.com:
    > ...
    > | I am not gettign the correct output fro mthe following snippet:
    > ...
    > | set tst=%@fileread[%fh,12]
    > | set nLen=%@len[%tst]
    > | echo Read %nLen bytes....
    > | :: returns "Read 4 bytes" - not 12
    >
    > Charles:
    > I have several alternatives for you.
    >
    > 1/ Use @FILEREADB - it is intended for reading binary files,

    OR


    Quote:
    >
    > 2/ Use @SAFEREAD in Charles Dye's SafeChars.dll plugin, OR
    >
    > 3/ Use the EXIF utilities to locate and read the fields of



    Quote:
    > interest in the image files. Download is free from www.hugsan.com/
    > EXIFutils/html/features.html, unpaid version has limits of how many



    Quote:
    > fields and files a single invocation can process, but no limit on

    totals.


    Quote:
    >
    > All of these will get you closer to your goal.
    > --
    > HTH, Steve
    >
    >
    >
    >
     
  9. Steve Fabian

    Joined:
    May 20, 2008
    Messages:
    3,523
    Likes Received:
    4
    ---- Original Message ----
    From: CSGalloway@nc.rr.com
    | 1/ I want to use TCMD 8 - 12.1 - filereadb is not in the help for
    | 8....

    It is in HELP for V9. You did not indicate what JPsoft command processor version you want to use, nor on what platform. In the absence of the former, and also seeing your name in this NG frequently, I assumed your are using a newer version than V8.

    | 2/ prefer not to have to use a plugin....

    That's your choice. Regardless, Charles' plugin might not work in V8, anyway.

    | 3/ I have a lot of files with no extensions where my main goal is to
    | write a BTM to examine the files and add the preferred extension.
    | Some will be just text files, HTML files, jpg, gif, whatever "RISS
    | would be if located in the file header, etc...

    IIRC back in those days I used something like %@ascii[%@fileread[....]]. You may try that. No guarantees!
    --
    Steve
     

Share This Page