标签: fread

fread()在不同的端机器上表现不同吗?

我正在读取bmp文件的标题.我的系统和bmp文件值都是小端格式.所以我读如下:

uint32_t fileSize;
fread(&fileSize,1,4,bmpFile);
Run Code Online (Sandbox Code Playgroud)

在bmp文件中,这些字节按以下顺序排序:... 36 04 01 00 ... fileSize的结果值为66614,即:0x00010436.我得到了正确的值,没有问题.

不过有些事困扰我.这个代码对大端机器的工作方式是否相似,或者fread()的行为方式不同而且我得到错误的0x36040100?

c endianness fread

5
推荐指数
1
解决办法
160
查看次数

在R中使用'na.strings'和'fClass'参数读取数据时错误的列模式

Windows 8.1,R版本3.1.1(2014-07-10),系统x86_64,mingw32

我有一个包含大量观察的文件(这里).这是文件中的一些字符串

Date;Time;Global_active_power;Global_reactive_power;Voltage;Global_intensity;Sub_metering_1;Sub_metering_2;Sub_metering_3
16/12/2006;17:24:00;4.216;0.418;234.840;18.400;0.000;1.000;17.000
16/12/2006;17:25:00;5.360;0.436;233.630;23.000;0.000;1.000;16.000
28/4/2007;00:20:00;0.492;0.208;236.240;2.200;0.000;0.000;0.000
28/4/2007;00:21:00;?;?;?;?;?;?;
21/12/2006;11:25:00;0.246;0.000;241.740;1.000;0.000;0.000;0.000
21/12/2006;11:26:00;0.246;0.000;241.830;1.000;0.000;0.000;0.000
Run Code Online (Sandbox Code Playgroud)

NA值用"?"表示.我正在尝试阅读该文件

epcData <- fread(dataFile,
                 sep = ";",
                 header = TRUE,
                 na.strings = "?",
                 colClasses = c("character", "character", rep("numeric", 7)),
                 stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)

我有警告像:

Bumped column 3 to type character on data row 10, field contains '?'. Coercing previously read values in this column from integer or numeric back to character which may not be lossless; e.g., if '00' and '000' occurred before they will now be just '0', …
Run Code Online (Sandbox Code Playgroud)

r fread data.table

5
推荐指数
1
解决办法
1636
查看次数

php file_get_contents()在加载图片时遇到困难

如上所述,当尝试读取这个简单的图像url时,php file_get_contents()函数甚至fopen()/ fread()组合都会卡住并超时:

http://pics.redblue.de/artikelid/GR/1140436/fee_786_587_png
Run Code Online (Sandbox Code Playgroud)

但是同样的图像很容易被浏览器加载,最重要的是什么?

编辑:

根据评论中的要求,我显示了用于获取数据的函数:

function customRead($url)
{
    $contents = '';

    $handle = fopen($url, "rb");

    $dex = 0;

    while ( !feof($handle) )
    {
        if ( $dex++ > 100 )
            break;

        $contents .= fread($handle, 2048);
    }

    fclose($handle);

    echo "\nbreaking due to too many calls...\n";

    return $contents;
}
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

echo file_get_contents('http://pics.redblue.de/artikelid/GR/1140436/fee_786_587_png');
Run Code Online (Sandbox Code Playgroud)

两者都给出了同样的问题

编辑:

正如评论中所建议我使用curl:

$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.1 …
Run Code Online (Sandbox Code Playgroud)

php fopen file-get-contents fread

5
推荐指数
1
解决办法
666
查看次数

为什么fread插入回车(\ r)到data.table?

我正在使用data.table::freadWindows 10计算机上的.csv文件中读取数据.数据正确读入read.csv; 但是,当我fread用来读入数据时,结果data.table的每一行中的所有最终列都以a结尾\r,可能表示回车.这会导致数字字段被赋予字符数据类型.(而不是数字文字4.53,行结束单元格将包含字符文字4.53\r.)

为什么会出现这个错误?有没有办法通过函数调用直接解决这个问题fread

更新

verbose = TRUE使用参数时,我得到以下内容

Input contains no \n. Taking this to be a filename to open
File opened, filesize is 0.000001 GB.
Memory mapping ... ok
Detected eol as \n only (no \r afterwards), the UNIX and Mac standard.
Positioned on line 1 after skip or autostart
This line is the autostart and not blank so searching up for the last …
Run Code Online (Sandbox Code Playgroud)

csv r fread data.table

5
推荐指数
1
解决办法
436
查看次数

根据R中匹配列的模板更改数据框列的数据类型

我有2个数据帧.

  • 模板 - 我将使用此数据框中的数据类型.
  • df - 我想根据模板更改此数据框的数据类型.

我想首先根据第二个数据帧更改数据类型.让我们假设我有以下数据框架,我用作模板.

> template
id <- c(1,2,3,4)
a <- c(1,4,5,6)
b <- as.character(c(0,1,1,4))
c <- as.character(c(0,1,1,0))
d <- c(0,1,1,0)
template <- data.frame(id,a,b,c,d, stringsAsFactors = FALSE)

> str(template)
'data.frame':   4 obs. of  5 variables:
 $ id: num  1 2 3 4
 $ a : num  1 4 5 6
 $ b : chr  "0" "1" "1" "4"
 $ c : chr  "0" "1" "1" "0"
 $ d : num  0 1 1 0
Run Code Online (Sandbox Code Playgroud)

我正在寻找下面的东西.

  • 在df中将模板的数据类型转换为完全相同. …

r fread dataframe dplyr data.table

5
推荐指数
1
解决办法
163
查看次数

在C中丢弃马车返回?

我希望能够读取Windows文本文件,在内存中修改它,然后用修改后的数据覆盖旧文件.但是,fread似乎并不存储我的Windows文本文件中存在的回车符,这会在我写旧数据时丢失.我找不到任何似乎有这个问题的人.

以下是一些演示此问题的示例代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE* textFile;
    long fileSize;
    char fileCharacterBuffer[100];

    int i;
    for(i = 0; i < 100; i++)
    {
        fileCharacterBuffer[i] = '\0';
    }

    textFile = fopen("./Test.txt", "r+");

    fseek(textFile, 0L, SEEK_END);
    fileSize = ftell(textFile);
    fseek(textFile, 0L, SEEK_SET);

    fread(fileCharacterBuffer, 1, fileSize, textFile);
}
Run Code Online (Sandbox Code Playgroud)

测试文件:

3
112
REd
110
green

#5/09/2014
5087 - 5/6/2014
Run Code Online (Sandbox Code Playgroud)

它的十六进制转储显示其EOL是\ r \n:

Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000  33 0D …
Run Code Online (Sandbox Code Playgroud)

c carriage-return fread

4
推荐指数
1
解决办法
1995
查看次数

PHP - 在 composer.json 中读取版本号

我如何制作一个脚本可以告诉我当它存储在 composer.json 时我运行的是哪个版本?

作曲家.json

{
    "require": {
        "someLiberyNameHere": "8.3.3.1"
    }
}
Run Code Online (Sandbox Code Playgroud)

php version-control fread

4
推荐指数
1
解决办法
2557
查看次数

使用“fread”,如何从 csv 中删除注释行?

我必须阅读一个 CSV 文件,其中包含一些注释行(以 # 开头)以及数据行。fread函数用于读取此 CSV 文件。

config <- fread("Configuration.csv")
Run Code Online (Sandbox Code Playgroud)

CSV 文件快照

在这个文件中的行数不是固定的,它们可能会被更改。如何在没有这些注释行的情况下阅读 CSV。

提前致谢!!!

csv comments r fread

4
推荐指数
1
解决办法
1884
查看次数

R data.table fread select 与部分字符串匹配?

我想用来fread仅拉入名称与条件匹配的列。(在本例中,我想提取包含标签 的所有列。)想象一下,您在工作目录中email调用的文件中有此数据:tempdata.txt

col1,col2,col3,email1,email2,col4,url1,url2,col5
1,2,3,4,5,6,7,8,9
9,8,7,6,5,4,3,2,1
x,x,x,me@me.com,you@you.com,y,y,y,y
a,a,a,a,a,a,http://google.com,http://stackoverflow.com,a
Run Code Online (Sandbox Code Playgroud)

如果您知道名称,则可以用于fread加载列的子集:

test <- data.table::fread("tempdata.txt", select=c("email1","email2"))

> test
      email1      email2
1:         4           5
2:         6           5
3: me@me.com you@you.com
4:         a           a
Run Code Online (Sandbox Code Playgroud)

是否也可以使用字符串匹配进行选择?我试图模仿这种行为,但在fread命令内:

> all <- data.table::fread("tempdata.txt")
> all %>% select(contains("email"))
      email1      email2
1:         4           5
2:         6           5
3: me@me.com you@you.com
4:         a           a
Run Code Online (Sandbox Code Playgroud)

感谢您的任何见解。

select r fread data.table

4
推荐指数
1
解决办法
1050
查看次数

在文件结束前只有部分记录可用时 fread 的行为

我的工作可以看作是一个 C 解释器,它检测它解释的程序中的所有未定义行为。在使用此解释器查找遗留开源 C 应用程序中的错误时,我对以下行为感到困惑:

遗留应用程序需要一个 10 字节的标头,它需要完整的标头才能做进一步的工作。它正确地调用了fread(buffer, 10, 1, f);. 错误的是,它没有分配fread调用的结果,并立即开始解析缓冲区。

当这fread应用于buffer可用数据少于 10 个字节的文件时,发生的情况是部分文件与可用数据一起归档。解释器,正如它设计的那样,检测到缓冲区的一个未初始化的部分后来被使用并警告了这一点,我能够将问题追溯到fread被丢弃的结果。

一分钟让我困惑的fread是,我同事写的部分填充了缓冲区,即使它0最终会返回,我想知道这是否可以改进。显然,一些实现确实读入缓冲区,最后将读取记录的数量返回为return n_bytes / __size;,让除法向下舍入,在这种情况下为0。但我想知道其他实现是否可能只buffer在整个记录可用时写入,否则完全未初始化。

实际上,在我手头的两个 Unices 上,fread其行为方式与我同事编写的模型实现方式相同:

~ $ cat t.c
#include <stdio.h>
#include <stdlib.h>

char buffer[11] = "0000000000";

int main(void) {

  FILE *f = fopen("aaaa", "r");
  if (!f) exit(1);
  int r = fread(buffer, 10, 1, f);
  printf("%s\n", buffer);
}
~ $ gcc …
Run Code Online (Sandbox Code Playgroud)

c fread language-lawyer

4
推荐指数
1
解决办法
131
查看次数