这是我需要做的。以文本文件为例(像这样)
test.txt
The quick brown fox jumped over the lazy dog
我需要将该文件拆分为任意字节。因此,以上文件为45个字节(包括EOL / EOF字符)。我基本上想以任意方式将其按字节分割。
因此,如果将其分为4部分,则会得到类似以下内容的信息:
当前
第1部分:快速b(11个字节)
第2部分:rown fox ju(11个字节)
第3部分:在t上踩翻(11个字节)
第4部分:他的懒狗(12个字节)
(大概是这样的)
但我想将其拆分为完整的单词,所以它看起来像这样
所需的
第1部分:快速棕色(15个字节)
第2部分:狐狸跳了起来(9个字节)
第3部分:超过(8个字节)
第4部分:懒狗(9个字节)
或大致类似的内容,以便各部门有完整的词汇。如果将3个单词和6个部分拆分为一个部分,则前3个单词应分别包含一个单词,其余部分应为空。像这样:
文件:快棕色
(分为6部分)
第一部分:
第2部分:快速
第3部分:棕色
第4-6部分:“”
这就是我所拥有的给我“当前”的东西
// Get file size in bytes
off_t fileSize = statBuf.st_size;
// Split a section of file to read for each thread
off_t startSection[NUM_SECTIONS];
off_t endSection[NUM_SECTIONS];
for (int i = 0; i < NUM_SECTIONS; i++) {
if (i == 0) {
// Start at 0, end at our interval chunk
startSection[i] = 0;
endSection[i] = fileSize / NUM_SECTIONS;
} else {
// Start at the last section's end
startSection[i] = endSection[i-1];
// End after the next chunk
endSection[i] = (fileSize / NUM_SECTIONS) * (i + 1);
}
// At the last section, add any remaining bytes
if (i == NUM_SECTIONS - 1) {
endSection[i] += fileSize % NUM_SECTIONS;
}
}
我想我必须窥视文件内容并标识空白/标点符号(我想将标点符号和空白字符视为相同)。但是我无法让它等分地实现(任意,可以是3部分,4、5、6等)
任何帮助表示赞赏。这也在Linux上。
最佳答案
我认为,如果您事先知道文件的大小,那么这种方法将是一个不错的起点(仅限C-ish伪代码):
filesize = ???;
nchunks = ???;
fileno = 1;
bytes_processed = 0;
while (bytes_processed < filesize)
{ copy_one_byte();
if (++bytes_processed >= (filesize / nchunks * fileno))
{ // keep processing to end of word or the end of file, whichever is first
// then switch to next file
++fileno;
}
}