- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是读取此 csv 文件的骨架代码的一部分:
year,month,day,location,mintemp,maxtemp
2015,4,28,18,6.7,12.9
2015,4,28,22,12.7,19.1
2015,4,29,18,7.6,15.3
2015,4,29,22,13.4,21.9
2015,4,30,18,7.3,21.8
2015,4,30,22,13.2,23.2
2015,5,1,18,9.4,15.9
2015,5,1,22,16.1,27.2
2015,5,2,18,8.7,16.3
2015,5,2,22,14.2,21.4
此函数将文件作为字符串读取,并以某种方式将其分开,并将其放入名为“D”、类型为 csv_t 的结构中。
结构及其他:
typedef char input_line_t[LINELEN+1];
typedef struct {
input_line_t labelstring;
char *labs[MAXCOLS+1];
int nrows;
int ncols;
double vals[MAXROWS][MAXCOLS];
} csv_t;
功能:
void
read_csv_file(char *fname, csv_t *D) {
FILE *fp; /* used to read from a named file */
input_line_t line;
int cols=0, rows=0, bytes=0;
int c, i, j, chr, ncommas, empties=0;
double x;
double nan = 0.0/0.0;
/* first argument on commandline should the data file name */
if (fname==NULL) {
/* and it wasn't there... */
printf("No csv file specified on commandline\n");
exit(EXIT_FAILURE);
}
/* try and open the named file for reading */
if ((fp=fopen(fname,"r")) == NULL) {
printf("Error: unable to open %s\n", fname);
exit(EXIT_FAILURE);
}
/* file is open, can now use fp to access CSV data,
start by reading the bytes of the header row */
while ((c=getc(fp)) != '\n') {
D->labelstring[bytes++] = c;
}
D->labelstring[bytes] = '\0';
/* now process line again, breaking in to separate labels by
replacing commas by nulls, and tracking the start of each of
the column headings */
D->labs[cols++] = D->labelstring;
for (i=1; i<bytes; i++) {
if (D->labelstring[i]==COMMA) {
D->labelstring[i] = '\0';
D->labs[cols++] = D->labelstring+i+1;
}
if (cols>MAXCOLS && i<bytes) {
printf("Too many columns, limit is %d\n",
MAXCOLS);
exit(EXIT_FAILURE);
}
}
D->labs[cols] = NULL;
/* ok, that's the labels sorted, now for the data */
while ((chr=getc(fp)) != EOF) {
/* there is another row, because first character of it
just got read, next step is to get the rest of them */
i = 0;
line[i++] = chr;
ncommas = (chr==COMMA) ;
while (((chr=getc(fp))!=EOF) && (chr!='\n')) {
line[i++] = chr;
ncommas += (chr==COMMA) ;
}
line[i] = '\0';
if (ncommas!=cols-1) {
printf("Data input error line %d\n", rows+2);
exit(EXIT_FAILURE);
}
/* then process the line from the right end */
j = i-1;
for (c=cols-1; c>=0; c--) {
/* look for next previous comma */
while (j>=0 && line[j]!=COMMA) {
j--;
}
/* access the value */
if (sscanf(line+j+1, "%lf", &x) == 1) {
D->vals[rows][c] = x;
} else {
D->vals[rows][c] = nan;
empties++;
}
/* mark the new end of the string */
line[j--] = '\0';
}
rows++;
/* check to make sure don't overflow array */
if (rows==MAXROWS) {
/* time to stop reading data */
printf("Too many rows, truncated at %d\n", MAXROWS);
break;
}
/* if not full, go round and see if there is another data row */
}
/* either input has all been read or array is full */
printf("file %s:\n %d columns and %d rows of data\n",
fname, cols, rows);
if (empties) {
printf(" %d entries were empty or non-numeric\n",
empties);
}
/* finish building the structure */
D->nrows = rows;
D->ncols = cols;
return;
}
我基本上了解发生了什么,除了从这一点开始,特别是这一点:
D->labs[cols++] = D->labelstring;
for (i=1; i<bytes; i++) {
if (D->labelstring[i]==COMMA/*=','*/) {
D->labelstring[i] = '\0';
D->labs[cols++] = D->labelstring+i+1;
}
最后一段代码非常困惑。 labelstring 是一个字符串,但可以添加数字。它有什么作用?这如何给出列数。如果我明白了这一点,我就能理解整个代码。感谢帮助。非常感谢!!
最佳答案
其实很简单。假设您有 labelstring
包含字符串 "Foo"
,那么它在内存中看起来像这样
+-----+-----+-----+------+| 'F' | 'o' | 'o' | '\0' |+-----+-----+-----+------+^|+-------------+| labelstring |+-------------+
换句话说,labelstring
指向字符串中的第一个字符。
如果您执行labelstring + 1
,您将得到*第二个字符:
+-----+-----+-----+------+| 'F' | 'o' | 'o' | '\0' |+-----+-----+-----+------+ ^ | +-----------------+ | labelstring + 1 | +-----------------+
这称为指针算术。
是的,您也可以在数组上使用它,因为数组会衰减为指向其第一个元素的指针。
了解了上述内容后,也很容易理解 array[X]
(对于任何数组或指针 array
以及对于任何 X
) 与 *(array + X)
相同。
真正让您大吃一惊的是,感谢 commutative property的addition ,最后一位表示 *(array + X)
等于 *(X + array)
这导致 array[X]
相等到X[数组]
。
关于c - 骨架代码 : character pointers struggles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30152457/
我被要求从存在的主干模型(可选)中删除几个属性。我的第一个意图是在模型上放置类似before_save回调的内容。但是我没有发现任何信息。 有可能在 Backbone 这样做吗? 最佳答案 只需覆盖默
我对使用 Backbone .js模型获取方法感到非常困惑。请参阅以下示例 Backbone 路由器: profile: function(id) { var model = new Accoun
我想根据现有的分段创建骨架,类似于此处所做的(来自 sk-image): 但是我想对 3D 数据执行此操作。那里有代码吗?最好使用 Python,但任何语言都有帮助。 我知道 this很棒的网站,但我
通常,我为与之合作的后端开发人员创建静态html prototype/skeleton。这有助于在实施网站之前发现UI / IA中的错误并进行昂贵的重写。 我想更进一步,并创建这些prototypes
我最近发现了 skeleton.css,它正是我要找的。我不太了解列,但是按钮的示例完全符合我的要求,因为在屏幕变窄时堆叠元素。我所拥有的效果很好,但我还不够精通 css,无法将按钮制作成列。我已将
我正在使用 Skeleton.css 在 wordpress 中创建一个网格系统 教程显示了标题的以下标记,在这里您可以看到 Logo 有 3 个类,- 五列和 clearfix
我正在使用“Microsoft Kinect SDK 1.8”。对于骨架跟踪,我计算了 FPS,大约是 10-15。 “Microsoft”是否提供任何规范?我想提高骨架帧数据的 FPS,可以吗? 最
我正在尝试将两个图像放在一个表单旁边,并使用骨架 css 使其响应: U
有谁知道我在哪里可以找到一个像样的框架页面或用于创建全 FBML Facebook 应用程序的示例?我查遍了官方维基并做了很多搜索,但我找不到任何可靠的东西。 wiki 中的大多数示例要么过时、损坏,
我想制作一个骨架 css 直到页面完全加载。我想到了这个解决方案。因此,如果 javascript 被禁用,我不会有任何问题。那是对的吗?也许你有更好的解决方案?谢谢! .slider {
我有一个使用骨架 css 实现的表单。我使用的是三列(即三分之一列)布局,但由于列内容的各自长度,这导致了大量空白。我更喜欢类似于以下的水平布局: 文本框 1 文本框 2 文本框 3 文本框4 文本框
假设我有一个名为 dict1 的字典,它具有我想要的新字典的骨架(顺序和嵌套深度)。例如: dict1 = { "Personnel": { "Performance": ""
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
因此,我了解我们可以执行以下操作: Collection.fetch({success:function(){bla ..}}) 但是说我想要这样的事情: Collection.fetch({成功:功
我想开发一个 swift cocoa pod,但是我不知道如何开始。 Cocoapods 预发布版现在支持 swift但是他们目前没有说明如何创建新的 swift 项目 pod 的说明。 当前关于创建
我目前正在使用提供深度图的 Processing Kinect 库。如果可能的话,我想知道如何使用它并使用它来创建 2D 骨架。不在这里寻找任何代码,只是我可以用来实现这些结果的一般过程。 此外,鉴于
我创建了一个使用多个“ View ”运行的 Vaadin Web 应用程序。 我想做的是应用 MVC/MVP 设计模式,它将无缝集成各种 View 中显示的信息。 到目前为止,我有一个带有登录、注册和
如何实现下面提到的view the URL 一种加载 View ,类似于许多使用它的应用程序,如 TvShowTime 最佳答案 这称为微光效果。 Facebook 已经开源了一个库,提供类似 fac
据我所知,JAX-WS(JAX-RPC)的前身使用的是 客户端 stub (代理)服务器骨架(也称为服务器端 stub ,或 Tie)系统,用于客户端和服务之间的通信。 但是,如果我正在阅读 JAX-
我已经编写了一个 WSDL 来生成 stub 和骨架,但我的骨架没有在 eclipse 中生成。我正在使用 Eclipse 的 Helios 版本。 谁能说出 WSDL 的问题是什么? 我想使用 Ax
我是一名优秀的程序员,十分优秀!