c語言文件刪除行
① c語言:如何根據需要刪除文件中特定的行
C語言文件操作有覆蓋和追加兩種模式,但不提供插入模式。所以要在文件中指定行進行刪除或者插入,需要按照如下流程操作: 1、以只讀打開文件; 2、將文件逐行讀入到內存中; 3、關閉文件; 4、在內存中對指定行插入或者刪除; 5、以只寫打開文件; 6、將修改後的數據寫入文件; 7、關閉文件。參考代碼:假定文件最多100行,執行刪除第5行,並在原第8,9行中間插入一行數據為例,代碼如下: #include #include char buf[100][1000];int main(){ FILE *fp; char *s="abcdef\n";//要插入的數據 int i=0; int n=0; fp = fopen("my.txt", "r");//讀方式打開文件 while(fgets(buf[n], 1000, fp) != EOF)//循環讀取所有數據 n++; fclose(fp);//關閉文件。 for(i = 4; i<7; i ++)//刪除第五行 strcpy(buf[i],buf[i+1]); strcpy(buf[7], s);//插入到第8行。 fp=fopen("my.txt", "w");//寫方式打開文件。 for(i = 0; i < n; i ++)//寫入所有處理後的數據。 fputs(buf[i], 1000, fp); fclose(fp);//關閉文件。 return 0; }
② 怎麼用c語言刪除文件第一行
#include<stdio.h>
voidmain(){
FILE*fin,*fout;
intc;
fin=fopen("t.txt","r");
fout=fopen("t.tmp","w");
while(1){
c=fgetc(fin);
if(EOF==c)break;
if(' '==c)break;
}
if(EOF!=c)
while(1){
c=fgetc(fin);
if(EOF==c)break;
fputc(c,fout);
}
fclose(fin);
fclose(fout);
remove("t.txt");
rename("t.tmp","t.txt");
}
③ C語言,刪除一行
刪除文件里的一行內容,後面的行向前移動一行,清空最後一行,程序如下:
假定一行不超過1000字元,
刪去第3行,L=3.
輸入輸出文件名
a.txt
#include<stdio.h>
void
main()
{
FILE
*fin;
fpos_t
pos_w,pos_r,pos;
int
i,k,L=3;
char
*one_line;
one_line
=
(char
*)
malloc(1000*sizeof(char));
fin
=
fopen
("a.txt","rb+");
for
(i=1;i<L;i++)
fgets(one_line,999,fin);
fgetpos
(fin,&pos_w);
fgets(one_line,999,fin);
//
delete
fgetpos
(fin,&pos_r);
pos
=
pos_r;
while
(1
==
1)
{
fsetpos
(fin,&pos);
if
(fgets(one_line,999,fin)
==NULL)
break;
fgetpos
(fin,&pos_r);
pos
=
pos_w;
fsetpos
(fin,&pos);
fprintf(fin,"%s",one_line);
fgetpos
(fin,&pos_w);
pos
=
pos_r;
}
pos
=
pos_w;
fsetpos
(fin,&pos);
k
=
strlen(one_line);
for
(i=0;i<k;i++)
fputc(0x20,fin);
fclose(fin);
}
④ C語言如何把一個文本文件的某一行刪除掉
可以用c語言的fseek()函數(stdio.h),...隨機讀寫
要知道, 一個文件打開後有一個位置指針, 指示當前讀寫位置..
順序讀寫時, 讀寫一個, 系統自動把位置指針移動到下一位置...
用fseek()就可以手動更改..
用法是fseek(FILE*(文件指針),long offset(偏移量),int whence(參考位置))
參考位取值:0 文件開頭, 1 當前位置, 2 文件最後..
作用就是將FILE*指定的文件的位置指針從參考位置移動offset位元組
移動方向由offset的+/-決定..
另外用rewind()可以將位置指針恢復到文件頭..
⑤ c語言刪除文件指定的某一行
這個程序適用於文件不是很大的情況,最好不要大於2G
先說思路,把文本文件按行讀入內存,在內存中的結構是一個雙向鏈表,每一個鏈表節點放一行。
文本文件 a.txt 先准備好,比如內容如下:
this is line 1
this is line 2
this is line 3
this is line 4
this is line 5
this is line 6
//以下是代碼
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct lnode{ //define line node
struct lnode *prev;
struct lnode *next;
char *line;
} lnode;
typedef struct line_in_mem{
lnode *head;
lnode *tail;
} line_in_mem;
lnode *newnode(void){ // return a node in heap
return (lnode *)malloc(sizeof(lnode));
}
lnode *get_position(line_in_mem *lines){ // prepare an lnode whose line is NULL, to store a line read from file
lnode *node = newnode();
if(!node)
return NULL;
node->prev = node->next = NULL;
if(lines->head == NULL)
lines->head = lines->tail = node;
else{
lines->tail->next = node;
node->prev = lines->tail;
lines->tail = node;
}
return node;
}
void readfile(line_in_mem *lines, FILE *file){ // read lines from file and store them in struct line_in_mem
char *buf = NULL;
int n = 0;
while(getline(&buf, &n, file) > 0){
lnode *node = get_position(lines);
if(node)
node->line = buf;
else
exit(-1);
buf = NULL;
}
}
static void print_line(line_in_mem *line){ // show lines in mem, which may not be needed
lnode *node;
for(node = line->head; node ; node = node->next){
printf("%s", node->line);
}
}
void delete_line(line_in_mem *line, int line_no){ //given a line number, delete it from the list. if line_no is less than 0 or bigger than total of lines, do nothing
lnode *node = line->head;
while(--line_no > 0 && node)
node = node->next;
if(!node)
return;
if(node->prev)
node->prev->next = node->next;
if(node->next)
node->next->prev = node->prev;
free(node);
}
void savefile(line_in_mem *lines, FILE *file){ //truncate file to 0 and write back
freopen("a.txt","w",file);
lnode *node;
for(node = lines->head; node; node = node->next){
fwrite(node->line, sizeof(char), strlen(node->line)/sizeof(char), file);
}
}
int main(){
line_in_mem lines;
lines.head = lines.tail = NULL;
int line_no = 3;
FILE *file = fopen("a.txt","r");
if(!file)
return -1;
readfile(&lines, file); //read file into mem. the struct of file in mem is a list of line
print_line(&lines);
printf("---------------\n");
delete_line(&lines, line_no); //delete line_no in mem
print_line(&lines);
savefile(&lines, file); //write back
fclose(file);
return 0;
}
⑥ c語言中清除一行的命令
試一下這個:
#include <stdio.h>
int main()
{
float I,n;
printf("1234\n");
printf("3456");
printf("\b\b\b\b");
return 0;
}
⑦ c語言實現文件內容某行刪除
整體思路如下:
首先,找到找到要刪除的那一行的行號,假如是j行,然後把指向文件的指針定位到j+1行處(可以使用fseek函數,Linux下可以使用lseek函數);
讀取一行(此時的文件指針已到達改行的末尾處,也可以認為是到了下一行的開始處),再把文件指針定位到j行,把剛才讀出的再寫會,使用循環直至文件結束。
簡單的說就是把後面的每一行一行一行的讀出,再一行一行的寫到前面一行。
⑧ 用C語言刪除空行(上一行)。
#include<stdio.h>
#include<stdlib.h>//forfunctionexit()
#include<string.h>//forfunctionsstrcpy()andstrlen()
constintMAXSIZE=200;//行最多字元數
intmain(){
charline[MAXSIZE],pline[MAXSIZE];
FILE*inp;//被修改的磁碟文件
FILE*outp;//修改後的磁碟文件
charoldfile[]="indata.txt";
charnewfile[]="outdata.txt";
if((inp=fopen(oldfile,"rt"))==NULL||(outp=fopen(newfile,"wt"))==NULL){
printf("打開文件時出錯! ");
exit(1);
}
fscanf(inp,"%s",pline);
while(!feof(inp)){
fscanf(inp,"%s",line);
if(strlen(line)>=1){//本行不是空行
fprintf(outp,"%s%s",pline,line);//上一行和本行被全部寫入新文件
}
else{//本行是空行
fprintf(outp,"%s",line);//僅寫入本行,上一行被丟棄
}
strcpy(pline,line);//當前行變成了上一行
}
fclose(inp);
fclose(outp);
return0;
}