[R] readLines() and unz() and non-empty final line

Kimmo Elo k|mmo@e|o @end|ng |rom ue|@||
Fri Oct 25 16:21:00 CEST 2024


Hi,

you could use "scan" instead, it seems to work fine also when wrapped 
around "unz".

Or, alternatively, you could use "unzip" instead of "unz". It works as 
expected, i.e. reads the last incomplete line and throws a warning about 
this.

So it seems to me that "unz" creates a non-blocking connection, whereas 
"unzip" creates a blocking connection. But this is a pure guess based on 
how the behave :-)

Best,

Kimmo

Bert Gunter kirjoitti 24.10.2024 klo 20.12:
> But note:
> 
>> zip("hello.zip", "hello.txt")
> updating: hello.txt (stored 0%)
>> readChar(unz("hello.zip","hello.txt"),100)
> [1] "hello"
> 
> I leave it to you and other wiser heads to figure out.
> 
> Cheers,
> Bert
> 
> On Thu, Oct 24, 2024 at 8:57 AM Iris Simmons <ikwsimmo using gmail.com> wrote:
> 
>> Hi Mikko,
>>
>>
>> I tried running a few different things, and it seems as though
>> explicitly using `open()` and opening a blocking connection works.
>>
>> ```R
>> cat("hello", file = "hello.txt")
>> zip("hello.zip", "hello.txt")
>> local({
>>      conn <- unz("hello.zip", "hello.txt")
>>      on.exit(close(conn))
>>      ## you can use "r" instead of "rt"
>>      ##
>>      ## 'blocking = TRUE' is the default, so remove if desired
>>      open(conn, "rb", blocking = TRUE)
>>      readLines(conn)
>> })
>> ```
>>
>> A blocking connection might be undesirable for you, in which case
>> someone else might have a better solution.
>>
>> On Thu, Oct 24, 2024 at 10:58 AM Marttila Mikko via R-help
>> <r-help using r-project.org> wrote:
>>>
>>> Dear list,
>>>
>>> I'm seeing a strange interaction with readLines() and unz() when reading
>>> a file without an empty final line. The final line gets dropped silently:
>>>
>>>> cat("hello", file = "hello.txt")
>>>> zip("hello.zip", "hello.txt")
>>>    adding: hello.txt (stored 0%)
>>>> readLines(unz("hello.zip", "hello.txt"))
>>> character(0)
>>>
>>> The documentation for readLines() says if the final line is incomplete
>> for
>>> "non-blocking text-mode connections" the line is "pushed back, silently"
>>> but otherwise "accepted with a warning".
>>>
>>> My understanding is that the unz() here is blocking so the line should be
>>> accepted. Is that incorrect? If so, how would I go about reading such
>>> lines from a zip file?
>>>
>>> Best,
>>>
>>> Mikko
>>>


More information about the R-help mailing list