如何在C中的文件的特定位置写入一个字符串
How to write a string in a specific position of file in C
我有一些类似于 LineNumber.Number
的字符串,它们来自以前的代码。我将它们拆分为 2 个变量 LineNumber
和 LineContent
,之后我想在文件的适当行中写入 LineContent
。但是 LineNumber
没有排序,所以也许我应该先写在第 300 行,然后在第 5 行,依此类推。我怎样才能用 C 语言做到这一点?该文件最初是空的,所以我无法计算 \n
s.
您可以根据遇到的最大行数分配一个 C 字符串指针数组。当 max 随着你的增加而增加时,你会重新分配。
每次您的代码看到一行的新内容时,它都会重新分配 C 字符串,并复制新内容。
完成后,迭代数组,逐行写入文件。
- 首先以 r+ 模式打开该文件,
p = fopen("filename.txt","r+");
- 取任何
char acline[80]
数组。
- 然后使用
fgets(acline,80,p)
这将复制存储在文件 acline[80]
中第 1 行的数据
然后使用这种方法搜索特定位置
for(int i=0;acline[i]!=0;i++)
{
if(bla bla bla)
{ //your code }
else {}
}
char buffer[] = { 'x' , 'y' , 'z' };
记下i的位置然后用fseek(p,0,SEEK_SET);
代替0放i的位置然后写或者用fwrite (buffer , sizeof(char), sizeof(buffer), p);
如果我没有正确理解你的问题,你有一个无序的 list string items 形式 LineNumber.LineContent
和你希望在处理它之后,你会得到一个文件,其中所有 LineContent
都写在正确的位置。
我想不出比 :
更好的方法
- 将所有项目放入一个数组中(前提是它可以放入内存中)
- 数组排序(看
qsort
函数)
- 一次在项目上打印数组,如果数字中有空洞则添加空行
我有一些类似于 LineNumber.Number
的字符串,它们来自以前的代码。我将它们拆分为 2 个变量 LineNumber
和 LineContent
,之后我想在文件的适当行中写入 LineContent
。但是 LineNumber
没有排序,所以也许我应该先写在第 300 行,然后在第 5 行,依此类推。我怎样才能用 C 语言做到这一点?该文件最初是空的,所以我无法计算 \n
s.
您可以根据遇到的最大行数分配一个 C 字符串指针数组。当 max 随着你的增加而增加时,你会重新分配。
每次您的代码看到一行的新内容时,它都会重新分配 C 字符串,并复制新内容。
完成后,迭代数组,逐行写入文件。
- 首先以 r+ 模式打开该文件,
p = fopen("filename.txt","r+");
- 取任何
char acline[80]
数组。 - 然后使用
fgets(acline,80,p)
这将复制存储在文件acline[80]
中第 1 行的数据
然后使用这种方法搜索特定位置
for(int i=0;acline[i]!=0;i++) { if(bla bla bla) { //your code } else {} }
char buffer[] = { 'x' , 'y' , 'z' };
记下i的位置然后用
fseek(p,0,SEEK_SET);
代替0放i的位置然后写或者用fwrite (buffer , sizeof(char), sizeof(buffer), p);
如果我没有正确理解你的问题,你有一个无序的 list string items 形式 LineNumber.LineContent
和你希望在处理它之后,你会得到一个文件,其中所有 LineContent
都写在正确的位置。
我想不出比 :
更好的方法- 将所有项目放入一个数组中(前提是它可以放入内存中)
- 数组排序(看
qsort
函数) - 一次在项目上打印数组,如果数字中有空洞则添加空行