- 论坛徽章:
- 0
|
由于我目前正在编一个对文本中的行进行排序的程序,而文本又非常的大(500MB以上),所以在处理的时候,只有将以上文件中的内容一块一块地读入字符串向量中(我是每次读300000行),然后对该字符串向量中的字符串排序,并把排好序的字符串向量中的字符串输出到动态创建的文件中,这样我就得到了多个这样的内容排好序的文件(文件名前面和原来的文件名一样,只是文件名的末尾多了一个整数字符,如源文件名为filename,那么我动态生成的文件名就为filename1, filename2...),这里我用了一个整形变量nosFile(number of sorted files)记录了程序动态创建的内容排好序的文件数。这时我就可以对这些排好序的小文件进行处理了,具体方法是一开始从所有内容排好序的文件中读取一行并将其加入vector<sfstruct>中(注:这里的sfstruct是一个结构体,里面有一个字符串变量和一个整形变量,其中字符串变量用来存储所读到的行,整形变量用来指示是从第几个文件中读出的),然后我就可以个对vector<sfstruct>排序(当然这里我定义了一个比较函数,只比较结构体中的string),然后我就可以把最小的结构体取出,并将其字符串输出到最终文件中,并根据我取出的结构体中的整形变量的值来判断下一次应该从哪个文件中读取一行!这样我就得到了一个最后排好序的文件。
但是我目前最大的障碍就是不知道如何利用我所定义的整形变量nosFile和源文件名这两个文件动态创建nosFile个文件输入流。注意这里是动态创建,因为我并不知道nosFile的值是多大,只有在程序运行后才能确定,也才能知道我所生成的临时文件的个数,这也就是我要打开的文件数!
求大家帮忙解答一下!谢谢!! |
|