这是我正在使用的代码:
if (!($fp = fsockopen('ssl://imap.gmail.com', '993', $errno, $errstr, 15)))
echo "Could not connect to host";
$server_response = fread($fp, 256);
echo $server_response;
fwrite($fp, "C01 CAPABILITY"."\r\n");
while (!feof($fp)) {
echo fgets($fp, 256);
}
Run Code Online (Sandbox Code Playgroud)
我收到了第一个回复:
OK Gimap ready for requests from xx.xx.xx.xx v3if9968808ibd.15
Run Code Online (Sandbox Code Playgroud)
但随后页面超时.我搜索了stream_set_blocking,stream_set_timeout,stream_select,fread等,但无法让它工作.我需要读取服务器发送的所有数据,然后继续执行其他命令(我将使用imap检索电子邮件).
谢谢
我想能够跳过被读成R经由列data.table的fread在v1.8.9功能.但我正在阅读的csv,没有列标题...这似乎是一个问题的fread ...有没有办法只指定我不想要特定的列?
是否更好地预先分配一个列名,然后让它读取它以便可以跳过它?
举个例子......
我从以下URL下载了数据
http://www.truefx.com/dev/data/2013/MAY-2013/AUDUSD-2013-05.zip
拉开它......
并使用fread将csv读入R并且它与csv扩展名具有几乎相同的文件名.
system.time(pp <- fread("AUDUSD-2013-05.csv",sep=","))
user system elapsed
16.427 0.257 16.682
head(pp)
V1 V2 V3 V4
1: AUD/USD 20130501 00:00:04.728 1.03693 1.03721
2: AUD/USD 20130501 00:00:21.540 1.03695 1.03721
3: AUD/USD 20130501 00:00:33.789 1.03694 1.03721
4: AUD/USD 20130501 00:00:37.499 1.03692 1.03724
5: AUD/USD 20130501 00:00:37.524 1.03697 1.03719
6: AUD/USD 20130501 00:00:39.789 1.03697 1.03717
str(pp)
Classes ‘data.table’ and 'data.frame': 4060762 obs. of 4 variables:
$ V1: chr "AUD/USD" "AUD/USD" "AUD/USD" "AUD/USD" ... …Run Code Online (Sandbox Code Playgroud) 我有一个带有额外空格的csv文件,我想将其作为数据帧读入R,剥离空白区域.
这可以通过使用来实现
testdata<-read.csv("file.csv", strip.white=TRUE)
Run Code Online (Sandbox Code Playgroud)
问题是数据集很大并且需要大约半小时.fread函数至少快两倍,但没有strip.white函数.
library("data.table")
testdata<-data.frame(fread("file.csv"))
Run Code Online (Sandbox Code Playgroud)
有没有一种快速的方法可以在读入后从列中剥离空白区域,或者是否有某种方法可以使用fread去除空白区域?
如果它只是一次性导入,我不介意那么多,但我需要多次并经常这样做.
任何人都可以告诉我如何在C#.NET版本2中以直接方式将一个字节数组添加到结构中?就像fread在C中发现的熟悉一样,到目前为止,我在读取字节流并自动填充结构方面没有取得多大成功.我已经看到了一些实现,其中通过使用unsafe关键字在托管代码中存在指针hocus-pocus .
看看这个样本:
public unsafe struct foobarStruct{
/* fields here... */
public foobarStruct(int nFakeArgs){
/* Initialize the fields... */
}
public foobarStruct(byte[] data) : this(0) {
unsafe {
GCHandle hByteData = GCHandle.Alloc(data, GCHandleType.Pinned);
IntPtr pByteData = hByteData.AddrOfPinnedObject();
this = (foobarStruct)Marshal.PtrToStructure(pByteData, this.GetType());
hByteData.Free();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有两个构造函数的原因 foobarStruct
这种实现是否足够好还是有更清洁的方法来实现这一目标?
编辑:我不想使用ISerializable接口或其实现.我正在尝试读取二进制图像以计算出使用的字段并使用PE结构确定其数据.
我有两个关于C fread函数的问题:
我读过fread用于读取二进制文件的内容.但是,当我fgets使用读取模式读取二进制文件和使用模式"r"的文本文件时,结果与fread使用"rb"文本文件fgets和二进制文件读取相同fread.那么,为什么有不同的函数来读取二进制文件和文本文件?
我fread用来在一次调用中读取10个字节的文件.我该如何在文件末尾停止阅读 - 即如何EOF指定fread?
我意识到我更大的文件失败了,因为它无法正确读取二进制文件中的第一个整数。这是我设置的测试文件。我知道我正在读取的 int 将始终为 1 个字节,因此我将数据读入 char,然后将其转换为 short。它在过去的某个时候开始工作,但我在清理代码时以某种方式把它搞砸了。
此时程序正在打印
“整数是 127”
什么时候应该打印
“整数是1”
有人知道为什么会这样吗?
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]){
FILE *inp;
char r;
short i;
if ((inp = fopen(argv[0],"r")) == NULL){
printf("could not open file %s for reading\n",argv[1]);
exit(1);}
fread((void *)&r,(size_t) 1,(size_t) 1, inp);
i = (short)r;
printf("The integer is %d\n",i);
}
Run Code Online (Sandbox Code Playgroud) 对于我的任务,我需要使用fread/fwrite.我写
#include <stdio.h>
#include <string.h>
struct rec{
int account;
char name[100];
double balance;
};
int main()
{
struct rec rec1;
int c;
FILE *fptr;
fptr = fopen("clients.txt", "r");
if (fptr == NULL)
printf("File could not be opened, exiting program.\n");
else
{
printf("%-10s%-13s%s\n", "Account", "Name", "Balance");
while (!feof(fptr))
{
//fscanf(fptr, "%d%s%lf", &rec.account, rec.name, &rec.balance);
fread(&rec1, sizeof(rec1),1, fptr);
printf("%d %s %f\n", rec1.account, rec1.name, rec1.balance);
}
fclose(fptr);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
clients.txt文件
100 Jones 564.90 200 Rita 54.23 300 Richard -45.00
产量
Account …
我得到了几个 CSV 文件,其中包含当地德语风格的数字,即以逗号作为小数分隔符,以点作为千位分隔符,例如 10.380,45。CSV 文件中的值以“;”分隔。这些文件还包含字符、日期、日期和时间以及逻辑类的列。
read.table 函数的问题是,您可以使用 dec="," 指定小数点分隔符,但不能指定千点分隔符。(如果我错了,请指正)
我知道预处理是一种解决方法,但我想以一种其他人可以在没有我的情况下使用它的方式编写我的代码。
我找到了一种通过设置自己的类,以我想要的方式使用 read.csv2 读取 CSV 文件的方法,如以下示例所示。基于在 R 中以点作为千位分隔符加载 csv 的最优雅方法
# Create test example
df_test_write <- cbind.data.frame(c("a","b","c","d","e","f","g","h","i","j",rep("k",times=200)),
c("5.200,39","250,36","1.000.258,25","3,58","5,55","10.550,00","10.333,00","80,33","20.500.000,00","10,00",rep("3.133,33",times=200)),
c("25.03.2015","28.04.2015","03.05.2016","08.08.2016","08.08.2016","08.08.2016","08.08.2016","08.08.2016","08.08.2016","08.08.2016",rep("08.08.2016",times=200)),
stringsAsFactors=FALSE)
colnames(df_test_write) <- c("col_text","col_num","col_date")
# write test csv
write.csv2(df_test_write,file="Test.csv",quote=FALSE,row.names=FALSE)
#### read with read.csv2 ####
# First, define your own class
#define your own numeric class
setClass('myNum')
#define conversion
setAs("character","myNum", function(from) as.numeric(gsub(",","\\.",gsub("\\.","",from))))
# own date class
library(lubridate)
setClass('myDate')
setAs("character","myDate",function(from) dmy(from))
# Read the csv file, in colClasses the columns class can be …Run Code Online (Sandbox Code Playgroud) 检查时
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char c[20];
size_t l;
l = fread(c, sizeof c, 1, stdin);
if (l != 1)
return 1;
return c[0] == 42;
}
Run Code Online (Sandbox Code Playgroud)
用c,我得到
$ clang --analyze -Xclang -analyzer-checker=alpha x.c
x.c:13:14: warning: The left operand of '==' is a garbage value
return c[0] == 42;
~~~~ ^
$ clang -v
clang version 7.0.1 (Fedora 7.0.1-4.fc29)
Run Code Online (Sandbox Code Playgroud)
此时真的有机会c包含垃圾吗?如果没有,如何避免发出警告(没有对进行明显的初始化c)?
因为这似乎是一个普遍的共识,那就是错误的肯定,所以我想集中讨论如何避免警告。
的确,这fread()是一个标准功能,分析人员应该在执行操作时就memset()已经知道了它们的语义。但是我对更通用的方法感兴趣,例如可以在库函数上使用。
我会assert_defined()以类似的方式调用一些特殊功能(让它调用它)
l = fread(c, …Run Code Online (Sandbox Code Playgroud) 是否可以在 fread 中指定数字列的数据类型?命令如
prices = markets[, fread(paste(mkt, 'price.csv')), by = mkt]
如果价格数据在一个文件中是整数而在另一个文件中是浮点数,则会失败。
因此,我必须显式编写一个 for 循环并将数据类型转换为数字并连接结果,而不是干净的单行代码。