[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