gpt4 book ai didi

c - 如何扫描文本文件并根据行数分成均匀分布的 4 个数组

转载 作者:行者123 更新时间:2023-11-30 17:31:57 25 4
gpt4 key购买 nike

我的程序扫描文本文件并返回字符数、单词数和行数。我需要修改它,以便它能够将文本文件扫描成 4 个相等的部分。该文件将包含编号的文本文件,例如每个文件名都在一个新行上。

1_100.txt1_101.txt1_10.txt1_11.txt1_12.txt......

文件大约有240行。一旦我将它们分成 4 个数组,那么我需要创建 4 个线程,它们将对数组中的文件执行计数操作,为扫描的每个文件返回 3 个值(单词、字符、行)。现在我只需要知道如何将原始文本文件拆分为 4 个数组,然后需要弄清楚如何让每个线程将其数组中的值与实际文件相匹配,以便可以处理其计数。

#include "Definition.h"
#include <stdio.h>
#include "ExternalVar.h"
#include <stdlib.h>
#include <string.h>

extern int Readline(),CountWord(),CountsUpdate();


char Line[MaxLine]; /* array of scanned file */
char Line2[MaxLine];
char Line3[MaxLine];
char Line4[MaxLine];

int NChars = 0, /* number of characters seen so far */
NWords = 0, /* number of words seen so far */
NLines = 0, /* number of lines seen so far */
LineLength; /* length of the current line */

int wc = 0,
lc = 0,
cc = 0,
tc = 0;



int i;

main(int argc, char *argv[])
{
FILE *fp;
fp=fopen(argv[1],"r");

if (fp)
{
while(fgets(Line,sizeof Line,fp) != NULL)
{

//This is where I need to figure out how to split the array Line into 4 array with equal distribution.
//create threads and pass each an array
//threads return counts for their files

cc = Readline(Line);
NChars += cc;

wc = CountWord(Line);
NWords += wc;

NLines++;

}


printf("Total Lines : %d \n",NLines);
printf("Total Words : %d \n",NWords);
printf("Total Chars : %d \n",NChars);
fclose(fp);
}
return 0;
}

最佳答案

不要在读取时拆分它们,而是将它们读入一个数组,并按每个文件的大小对该数组进行排序。然后将大阵以循环赛的方式进行分割。这应该会缩短您的总处理时间。如果考虑分配给每个线程的文件的总大小和数量,您可以做得更好。

无论哪种情况,您都可以使用 N 个索引将列表拆分为 N 个,每个索引保留不同列表的尾部位置:

set all indices to 0
for line in file:
lists[curlist][indices[curlist]++] = line
curlist = (curlist + 1) % N

关于c - 如何扫描文本文件并根据行数分成均匀分布的 4 个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24402057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com