在今天使用思源笔记的过程中遇到了一些严重问题:
有一个文档在软件中显示大小为 1.04GB,但导出后仅有 2.9MB,而且导出再重新导入该文档后,在思源中仍显示为 1.04GB,不清楚造成这一问题的具体原因。
此外,一旦点击这个“输入”文档,思源界面就会出现白屏,无法正常使用,只能强制退出应用。
在今天使用思源笔记的过程中遇到了一些严重问题:
有一个文档在软件中显示大小为 1.04GB,但导出后仅有 2.9MB,而且导出再重新导入该文档后,在思源中仍显示为 1.04GB,不清楚造成这一问题的具体原因。
此外,一旦点击这个“输入”文档,思源界面就会出现白屏,无法正常使用,只能强制退出应用。
你这个文件大得离谱
大部分数据都被压缩掉了,说明有极大量的重复数据:
我用记事本看了一下,整个文件绝大部分是 换行 制表符,是怎么弄出来的?你有印象在这个文档里做了什么操作吗?
解决方案已私信。这里备注一下我处理文件用到的 C 程序(由 Cursor 生成)和提示词:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFER_SIZE 4096
// gcc replace_tabs.c -o replace_tabs
// ./replace_tabs largefile.json output.json
int main(int argc, char *argv[]) {
if (argc != 3) {
fprintf(stderr, "用法: %s 输入文件 输出文件\n", argv[0]);
return 1;
}
FILE *input = fopen(argv[1], "r");
if (!input) {
fprintf(stderr, "无法打开输入文件: %s\n", argv[1]);
return 1;
}
FILE *output = fopen(argv[2], "w");
if (!output) {
fprintf(stderr, "无法创建输出文件: %s\n", argv[2]);
fclose(input);
return 1;
}
char buffer[BUFFER_SIZE];
size_t bytes_read;
int in_escape = 0;
int found_tab = 0;
int last_char = EOF;
while ((bytes_read = fread(buffer, 1, BUFFER_SIZE, input)) > 0) {
for (size_t i = 0; i < bytes_read; i++) {
char current = buffer[i];
if (in_escape) {
if (current == 't') {
if (!found_tab) {
fputc('\\', output);
fputc('t', output);
found_tab = 1;
}
} else {
if (found_tab) {
found_tab = 0;
}
fputc('\\', output);
fputc(current, output);
}
in_escape = 0;
} else if (current == '\\') {
in_escape = 1;
} else {
if (found_tab) {
found_tab = 0;
}
fputc(current, output);
}
last_char = current;
}
}
fclose(input);
fclose(output);
return 0;
}
我这里有个出现异常的 JSON 文件 largefile.json,文件大小 982 MB,其中至少 980 MB是转义的制表符 `\t`(包含 `\` 与 `t` 两个字符的字符串),体积太大以至于没有哪个软件能够打开这个文本文件了(无法确定 JSON 结构是否损坏,但不重要),请写一个 C 程序将文本中的连续出现的 `\t` 合并为一个
我换了个方法处理,最后再手动修改了一下文件。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFER_SIZE 4096
#define TAB_SEQUENCE_LENGTH 30
int main(int argc, char *argv[]) {
if (argc != 3) {
fprintf(stderr, "用法: %s <输入文件> <输出文件>\n", argv[0]);
return 1;
}
FILE *input = fopen(argv[1], "r");
if (!input) {
fprintf(stderr, "无法打开输入文件: %s\n", argv[1]);
return 1;
}
FILE *output = fopen(argv[2], "w");
if (!output) {
fprintf(stderr, "无法打开输出文件: %s\n", argv[2]);
fclose(input);
return 1;
}
char buffer[BUFFER_SIZE];
char tab_buffer[BUFFER_SIZE];
int tab_count = 0;
int in_string = 0;
int escape_next = 0;
size_t bytes_read;
while ((bytes_read = fread(buffer, 1, BUFFER_SIZE, input)) > 0) {
for (size_t i = 0; i < bytes_read; i++) {
if (escape_next) {
if (buffer[i] == 't') {
tab_buffer[tab_count++] = '\\';
tab_buffer[tab_count++] = 't';
if (tab_count >= TAB_SEQUENCE_LENGTH * 2) {
// 跳过这30个\t
tab_count = 0;
}
} else {
// 如果不是\t,输出之前缓存的字符
if (tab_count > 0) {
fwrite(tab_buffer, 1, tab_count, output);
tab_count = 0;
}
fputc('\\', output);
fputc(buffer[i], output);
}
escape_next = 0;
} else {
if (buffer[i] == '\\') {
escape_next = 1;
} else {
// 如果不是转义序列,输出之前缓存的字符
if (tab_count > 0) {
fwrite(tab_buffer, 1, tab_count, output);
tab_count = 0;
}
fputc(buffer[i], output);
}
}
}
}
// 输出剩余的tab_buffer内容
if (tab_count > 0) {
fwrite(tab_buffer, 1, tab_count, output);
}
fclose(input);
fclose(output);
return 0;
}
[背景信息] 我这里有个出现异常的 JSON 文件 largefile.json,文件大小 982 MB,其中至少 981 MB是转义的制表符 `\t`(包含 `\` 与 `t` 两个字符的字符串),JSON 结构是正常的。 存在异常的 JSON 示例: { "Type": "NodeText", "Data": "\t\t\t\t\t\t\t\t\t\t\t\t\t" }, [需求] 请写一个 C 程序流式处理整个 JSON 字符串,每连续出现30次的 `\t` 字符串,就删除:`\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t`
WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。
正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。
宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”
FlowUs.息流 个人及团队的新一代生产力工具。
让复杂的信息管理更轻松、自由、充满创意。
持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。
Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。
Mobi.css is a lightweight, flexible CSS framework that focus on mobile.
星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网
小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。
由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!
Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。
深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。
我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。
Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。
用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖。
用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/
各种网址链接、内容导航。
SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。
webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。
Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。
Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于