我正在读取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?
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) 如上所述,当尝试读取这个简单的图像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) 我正在使用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) 我有2个数据帧.
我想首先根据第二个数据帧更改数据类型.让我们假设我有以下数据框架,我用作模板.
> 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)
我正在寻找下面的东西.
我希望能够读取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) 我如何制作一个脚本可以告诉我当它存储在 composer.json 时我运行的是哪个版本?
作曲家.json
{
"require": {
"someLiberyNameHere": "8.3.3.1"
}
}
Run Code Online (Sandbox Code Playgroud) 我必须阅读一个 CSV 文件,其中包含一些注释行(以 # 开头)以及数据行。fread函数用于读取此 CSV 文件。
config <- fread("Configuration.csv")
Run Code Online (Sandbox Code Playgroud)
在这个文件中的行数不是固定的,它们可能会被更改。如何在没有这些注释行的情况下阅读 CSV。
提前致谢!!!
我想用来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)
感谢您的任何见解。
我的工作可以看作是一个 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)