我有一个非常大的文本文件(+ 10GB),我想阅读一些数据挖掘技术。 为此,我使用MPI并行技术,因此许多进程可以一起访问同一个文件。 实际上,我希望每个进程读取N行数。 由于文件不是结构化的(相同数量的字段,但每个字段可以包含不同数量的字符),我有义务解析文件,这不是并行的,而且需要花费很多时间。 有没有办法直接访问特定数量的行,并解析和计算行数? 谢谢你的帮助。
我正在学习C,我决定将文字游戏作为我的学习项目 。 所以我正在尝试这种将文本文件读入2D数组的原始“解析器”,但是存在一个问题:这个地图不使用1个字符宽的单元格,它使用2个字符宽的单元格。 例如,播放**表示,门用##表示,依此类推。 这意味着,我需要读取文本文件的2个字符,然后将其分配给地图中的相应单元格。 好吧,我制作了一个包含的测试文件 aabbccddee ffgghhiijj kkllmmnnoo ppqqrrsstt uuvvwwxxyy 我试着用它读 #include #define ROWS 5 #define COLS 5 int main() { FILE *mapfile = fopen(“durr”, “r”); char charbuffer[3], row, col, *map[ROWS][COLS]; /* Initializing array */ for (row = 0; row < ROWS; row++) { for (col = 0; col < COLS; col++) { map[row][col] […]
我正在尝试读取一个CSV文件并从所述文件中打印出选择值,所有这些都是字符串(最后有一个字符),而我实际打印出来时遇到了麻烦。 它应该忽略输入中的特定数据,如ASO,ORL,PR ,当然也可以跳过空白区域。 我不知道文件I / O是否有问题,或者我打错了。 有人可以帮忙吗? #include #include #include typedef struct airdata{ char *siteNum; char *LocalID; char *portName; char *city; char *state; char *lat; char *lon; char Tower; } airdata; int main(){ FILE * fin = fopen(“florida.csv”, “rw”); if((fin = fopen(“florida.csv”, “r”)) == NULL){ printf(“etl ERROR: File inputFile not found.\n”); return(0); } printf(“\nFile opened […]
刚开始学习/使用管道,并想知道如何将应用程序的文件输出路由到管道,以便其他应用程序可以使用它。 确切地说,我想将ffmpeg的输出(转码后的video数据)传输到我的应用程序中以使用它。 如果我创建一个像/tmp/out.mp4这样的命名管道并将其作为输出文件名提供给ffmpeg,ffmpeg将尝试再次创建此文件,可能会覆盖我的管道(或类似的东西)。 如何应对这种情况? 是否有任何通用的方法可以透明地转移应用程序的文件IO? (我正在尝试编写一个video流服务器(仅供学习和娱乐),它将像avi这样的格式转换为流式友好格式,如mpeg4,在流媒体中,我发现ffmpeg对于此目的来说太慢了,它需要2秒才能转码1秒video:( 这是我的设置/ PC或ffmpeg的问题是否缓慢? ) PS:顺便说一下,我在C中写这个。
我是C的中级学生。我正在尝试制作银行管理程序,但首先我需要制作一个登录程序,所以我创建了以下其中一项。 我最近在C中了解了文件I / O,并且对fread和fwrite知之甚少。 我有一个文件(data.txt)格式如下,如下。 user1 1124 user2 3215 user3 5431 在下面的程序中,我要求用户输入用户名和密码(4位密码)并将文件数据复制到结构中,然后将这两者进行比较以validation信息。 我的程序有什么问题以及如何使fread正常工作。 是在data.txt文件中格式化还是我应该更改它。 提前致谢… #include #include #include struct user_account { char u_name[30]; int u_pin; } log_in; int login() { int start; int i, n; int t_pin[4]; // TEMPORARY INT PIN for storing pin inputed by user char t_name[30]; // TEMPORARY STRING for storing name […]
这样做安全吗? fgets是否使用null终止缓冲区,或者我应该在调用fgets和调用clean之前将第20个字节设置为null? // strip new lines void clean(char *data) { while (*data) { if (*data == ‘\n’ || *data == ‘\r’) *data = ‘\0’; data++; } } // for this, assume that the file contains 1 line no longer than 19 bytes // buffer is freed elsewhere char *load_latest_info(char *file) { FILE *f; char *buffer […]
我有一个我正在尝试编写的C程序,它打算反转文件的行。 我仍然非常擅长C(虽然我来自Java背景),所以我很可能用指针等犯错误,但我已经尝试过每一次都在查阅手册。 这有点任务。 程序的要点是反转文件的内容,数量最多为MAX_LINES,每行不超过MAX_CHARS。 我想尝试的方法如下:使用fgets从文件读取,80个字符或直到EOL,存储该字符串,并重复该过程,直到达到EOF或MAX_LINES,使用侧面的计数器。 之后我只是将相同的字符串放在不同的数组中,从second_array [counter]变为0.但是,我遇到了将字符串实际放入第一个数组的问题。 这是我到目前为止所拥有的: 1 #include 2 #include 3 4 #define MAX_LINES 100 5 #define MAX_CHAR 80 6 7 int main(int argc, char *argv[]) 8 { 9 if(argc != 2) 10 goto out; 11 FILE *fp; 12 char *str[MAX_CHAR]; 13 char buffer[MAX_CHAR]; 14 char *revstr[MAX_CHAR]; 15 int curr_line = 0, i […]
我对C很新,我遇到了fwrite问题。 我想使用一个包含两个值的结构: struct keyEncode{ unsigned short key[2]; unsigned short encoded[2]; }; 然后我在我的main中声明我的struct和指向该struct的指针: struct keyEncode keynEncode; struct keyEncode *storedVal = &keynEncode; 然后我为结构赋值,并希望使用fwrite将结构写入文件: keynEncode.key[0] = k1[0]; keynEncode.key[1] = k1[1]; keynEncode.encoded[0] = p[0]; keynEncode.encoded[1] = p[1]; // i tried to use storedVal.key[0] = k1[0]; but i was getting compile errors fwrite(storedVal, sizeof(storedVal), 0xffff, fp); 现在我的问题是fwrite没有写任何文件。 我哪里错了?
给定一个任意文件描述符,如果它是非阻塞的,我可以阻止它吗? 如果是这样,怎么样?
#include int main() { FILE* fp; fp = fopen(“temp.txt”, “w”); fprintf(fp, “Hello, World!\n”); // remove(“temp.txt”); this requires the filename as an argument // removefile(fp); <— is something like this possible? return 0; } remove函数( 在stdio.h中定义 )将文件名作为参数,但不是文件指针本身。 C标准库中是否有一些函数可以删除文件,并将文件指针作为争论?