- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想读取一个超过 5.5M 行的文本文件,但是,为了测试建议,我只读取了一个 900 行和 70 列的文本文件并将其存储在 matrix x[1000][100] 中
。
我这样做是因为我想识别包含日期的文本文件的第 13 列。此外,我会将此文本拆分为包含每天数据的许多其他文本文件。
我将创建另一个具有相同值的文本文件,每次第 13 列更改时,我都会写一条消息说 "NEW DAY"
。在此之后,我将使用其他软件跟踪此 "NEW DAY"
并在找到时拆分。
一切正常,直到 385 行
,请记住每行大约有 70 列
,但是,在这个值之后我不知道为什么文件停止到识别每一行的 13th column
中的变化,并在数字变化时停止写入 "NEW DAY"
。
数据是这样显示的:
TAM 2000-03-07T16:55 22.78 5.50999 2 110 1 233 2.2 65 0.3 293 0
T 后面的数字是我要跟踪的数字。
代码如下:
int main()
{
long int i = 0;
long int j = 0;
char x[1000][100];
FILE *file = fopen("Entrada.txt", "r");
FILE *file2 = fopen("Saida.txt", "w");
while ((x[i][j] = fgetc(file)) != EOF) {
if(i>=1 && j==70) {
if(x[i][13] != x[i-1][13]) {
for(j=0; j <= 70;j++) {
fprintf(file2, "%c", x[i-1][j]);
printf("%c", x[i-1][j]);
if(j==70){
fprintf(file2, "\n %s \n","New Line");
printf("\n %s \n","New Line");
}
}
} else {
for(j=0; j <= 70 ;j++) {
fprintf(file2, "%c", x[i][j]);
printf("%c", x[i][j]);
if(j==70) {
fprintf(file2, "\n %s \n","");
printf("\n %s \n","");
}
}
}
}
if(x[i][j] =='\n'){
i++;
j=0;
} else {
j++;
}
}
fclose(file2);
return 0;
}
最佳答案
您在问题中声明您需要检查第 13 个字符以查看日期是否已更改,但您似乎只检查了一天中的一位数字。天可以有两位数。
在 C 中,数组索引基于 0,因此根据您的样本输入,它看起来像索引应检查 12 和 13,即第 13 和 14 列。
您不需要存储所有行并进行比较,只需存储更改的信息,即告诉您日期的两个字符。
你可以尝试这样的事情:
char line[100];
char old12 = ' ';
char old13 = ' ';
long row = 0;
while (fgets(line, sizeof(line), file1) != NULL)
{
if (row++>0)
{
if (line[12] != old12 || line[13] != old13)
{
/* remove \n */
char* nl = strchr(line,'\n');
if (nl) *nl = '\0';
fprintf(file2,"%s", line );
fprintf(file2, " New Line\n" );
}
else
{
fprintf(file2,line);
}
}
else
{
fprintf(file2,line);
}
old12 = line[12];
old13 = line[13];
}
如果你正在处理一个大文件,拥有一个大的二维数组肯定会给你带来问题,而是尽量在内存中保留尽可能少的文本。
您没有描述您的数据,但如果数据中存在间隙,您可能需要检查整个日期而不是仅仅检查一天,否则将不会检测到这样的行:
TAM 2000-03-07T16:55 22.78 5.50999 2 110 1 233 2.2 65 0.3 293 0
TAM 2000-04-07T16:55 22.78 5.50999 2 110 1 233 2.2 65 0.3 293 0
关于c - 在 C 中读取巨大的 Txt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36735645/
我通过在共享首选项中使用 GSON 将其转换为 json 来存储我的复杂对象。但是在检索它时,无法获得预期的字符串。 代码 这里 holderListCustomizationMap 是对象的复杂映射
因此,我正在尝试对大于可用RAM的gz压缩文件执行某种面向行的操作,因此排除了将其首先读取为字符串的情况。问题是,如何在rust(缺少gunzip file.gz|./my-rust-program)
我试图更好地理解为什么具有潜在大精度的大数字处理不一致,特别是在 JavaScript 及其本地化工具(例如 ECMA-402/Intl)中。我假设这与 float 的使用有关,但我想了解限制在哪里和
我们有一个 5GB 的 csv 文件,这是我们业务的主列表。 有多个类别,每个类别包含数千条记录。我们的目标是将每个类别导出为其自己的 csv 文件。 我们如何运行查询并导出数据? 运行 OSX。有没
基于上一个问题 ( see here ),我试图通过 xmlEventParse 读取许多大型 xml 文件,同时保存节点变化数据。使用此示例 xml:https://www.nlm.nih.gov/
我正在开发一个系统,它加载一个巨大的 CSV 文件(超过 100 万行)并保存到数据库中。每行也有超过一千个字段。 CSV 文件被视为一个批处理,每一行都被视为其子对象。在添加对象的过程中,每个对象都
借助node-google模块 我编写了一个简单的 Node 模块来为我的网络应用程序启用“文本网络搜索”功能,并在我的一个 View 中显示结果。 由于在来自同一 IP 的少量查询后 Google
我有相当大的 4D 阵列 [20x20x40x15000],我使用 h5py 将其作为 HDF5 文件保存到磁盘.现在的问题是我想计算整个数组的平均值,即使用: numpy.average(HDF5_
我在遗留代码库中连接巨大的 CString 时遇到问题。 CStrings 可以包含 base64 编码的文件,因此可能很大。在某些时候,这些 CString 会像这样连接起来: result +=
我正在尝试让我的服务器提供来自另一台服务器的巨大文件。但是,为了保护我的凭据免受该远程服务器的攻击,我不能简单地将请求者重定向到文件 url;另一方面,虽然使用 StreamingHttpRespon
感谢对此的任何见解,我有 2 个问题: 1) 弄清楚为什么我的本地数据库 oplog 庞大且不断增长 2) 安全删除(或重置)我的 local.oplog 以释放 18 GB 的浪费空间 场景:我一直
我的预期任务:获取大量数据(1 GB 及更多大小)json 字符串,操作(进行一些格式化、解析 json、重组 json 数据)并写入新格式化的 json 字符串作为响应。处理这种情况的更好方法是什么
我做了一个小的 Angular 4 应用程序,但我不知道如何应用 tree shaking 和 aot 编译。我运行的命令如下: ng build --prod --aot 但我得到的结果仍然很大,供
我是一名优秀的程序员,十分优秀!