如何在C语言中读取一个文件中的一段字符串去另一个新文件? C语言取某个字符后的字符串存到另一个字符串
C\u7a0b\u5e8f,\u5982\u4f55\u4ece\u6307\u5b9a\u6587\u4ef6\u4e2d\u8bfb\u53d6\u4e00\u4e2a\u5b57\u7b26\u4e32\uff1f#include #include int main(){FILE *fp;char cl[100];if((fp=fopen("1.txt","r"))==NULL)exit(1);while(fscanf(fp,"%s",cl)==1)printf("%s \n",cl);if(fclose(fp)!=0)exit(1);return 0;}
C\u8bed\u8a00\u662f\u76ee\u524d\u4e16\u754c\u4e0a\u6d41\u884c\u3001\u4f7f\u7528\u6700\u5e7f\u6cdb\u7684\u9762\u5411\u8fc7\u7a0b\u7684\u9ad8\u7ea7\u7a0b\u5e8f\u8bbe\u8ba1\u8bed\u8a00\u3002 C\u8bed\u8a00\u5bf9\u64cd\u4f5c\u7cfb\u7edf\u548c\u7cfb\u7edf\u4f7f\u7528\u7a0b\u5e8f\u4ee5\u53ca\u9700\u8981\u5bf9\u786c\u4ef6\u8fdb\u884c\u64cd\u4f5c\u7684\u573a\u5408\uff0c\u7528C\u8bed\u8a00\u660e\u663e\u4f18\u4e8e\u5176\u5b83\u9ad8\u7ea7\u8bed\u8a00\uff0c\u8bb8\u591a\u5927\u578b\u5e94\u7528\u8f6f\u4ef6\u90fd\u662f\u7528C\u8bed\u8a00\u7f16\u5199\u7684\u3002
\u601d\u8def\uff1a\u5148\u904d\u5386\u5b57\u7b26\u4e32\uff0c\u5982\u679c\u627e\u5230\u8be5\u5b57\u7b26\u540e\uff0c\u628a\u540e\u9762\u7684\u6240\u6709\u5b57\u7b26\u590d\u5236\u5230\u53e6\u4e00\u4e2a\u5b57\u7b26\u4e32\u3002
\u4f8b\u5982\uff1a
#include #include int main (){char ch1[]="123456789",ch2[20],a='4';int i=0,j=0;while(ch1[i++]!=a);while(ch1[i]){ch2[j++]=ch1[i++];}ch2[j]='\0';puts(ch2);return 0;}/*\u8f93\u51fa\uff1a56789 */
分析:程序的逻辑很简单。程序必须打开两个文件,以可读的方式打开一个已有文件和以可写的方式打开一个新文件,后将已有文件中的内容,暂时存放在内存中,再写入新的文件,后关闭所有文件,程序结束。
步骤1:首先需要声明两个文件指针,并让它们分别指向打开的旧文件和新文件,并检查文件是否被打开,以下是代码:
FILE *f_old = NULL; //指向旧文件的文件指针;
FILE *f_new = NULL; //指向新文件的文件指针;
const char *old_name = "D:\emp\\old.txt"; //假设旧文件是D盘temp文件夹中的old.txt文件(字符串中输入'\'符号要用两个连续的'\'符号;
const char *new_name = "D:\emp\
ew.txt"; //假设新文件是D盘temp文件夹中的new.txt文件;
if((f_old = fopen(old_name,"r")) == NULL) //以只读方式打开旧文件并检查,如果打开失败,程序将会结束,并在屏幕显示一条信息提示;
{
printf("old.txt文件打开失败!
");
return 1;
}
if((f_new = fopen(new_name,"w")) == NULL) //以只写方式打开新文件并检查,如果打开失败,程序将会结束,并在屏幕显示一条信息提示;
{
printf("nwe.txt文件打开失败!
");
return 1;
}
步骤2:打开两个文件后,就需要读出旧文件内容,并暂时储存在一段固定大小的内存中,再写入新的文件。还需要一个循环来重复这项工作,直到文件末尾,以下是代码:
char temp[1024] = {0}; //声明大小为1024(可以更大,但不推荐)的字符串,并初始化为0;
while(fgets(temp,1024,f_old)) //因为并不知道要循环多少次,所以推荐使用while循环,当没有内容可读时,循环结束;
fputs(temp,f_new); //使用fputs函数将读出的内容写入新的文件;
步骤3:现在已经将旧文件的内容全部写入到了新文件中,接下来我们来做一些收尾工作,关闭文件,放空指针,以下是代码:
fclose(f_old); //关闭旧文件;
fclose(f_new); //关闭新文件;
f_old = f_new = NULL; //让两个文件指针指向空;
任务完成,现在可以去看看新文件里的内容了。下面是完整代码:
#include <stdio.h> //所有代码只需要stdio.h头文件;
int main(void)
{
FILE *f_old = NULL; //旧文件指针;
FILE *f_new = NULL; //新文件指针;
const char *old_name = "D:\emp\\old.txt"; //旧文件名,可自定义;
const char *new_name = "D:\emp\
ew.txt"; //新文件名,可自定义
if((f_old = fopen(old_name,"r")) == NULL) //打开并检查旧文件指针;
{
printf("old.txt文件打开失败!
"); //若打开失败后会显示一条提示信息;
return 1; //返回1,程序非正常结束;
}
if((f_new = fopen(new_name,"w")) == NULL) //打开并检查新文件指针;
{
printf("nwe.txt文件打开失败!
"); //若打开失败后会显示一条提示信息;
return 1; //返回1,程序非正常结束;
}
char temp[1024] = {0}; //申明并初始化一个中转字符数组,大小可自定义;
while(fgets(temp,1024,f_old)) //while循环使用fgets函数,读取旧文件内容暂时存放到temp,当无内容可读时,循环结束;
fputs(temp,f_new); //使用fputs函数,每次迭代将temp的内容写入新文件中;
fclose(f_old); //关闭旧文件;
fclose(f_new); //关闭新文件;
f_old = f_new = NULL; //将两个文件指针指向空;
return 0;
}
open函数打开,read函数读出数据到数组中,write函数写到另外一个文件中。
FILE 基本操作,可以帮你写
绛旓細1. 鎵撳紑鏂囦欢锛氫娇鐢–璇█涓殑鏂囦欢鎿嶄綔鍑芥暟锛屽`fopen()`锛屾墦寮鍖呭惈鏃犲悜鍥炬暟鎹殑鏂囦欢銆傜‘淇濅互閫傚綋鐨勬ā寮忥紙渚嬪锛"r"琛ㄧず璇诲彇锛夋墦寮鏂囦欢銆2. 璇诲彇鏁版嵁锛氫娇鐢ㄦ枃浠舵搷浣滃嚱鏁帮紝濡俙fscanf()` 鎴 `fgets()`锛岄愯璇诲彇鏂囦欢涓殑鏁版嵁銆傛棤鍚戝浘鐨勮〃绀烘柟寮忓彲鑳芥湁鎵涓嶅悓锛屼綘鍙互鏍规嵁鍏蜂綋鐨勬暟鎹牸寮忔潵杩涜澶勭悊銆備緥濡...
绛旓細涓銆佷互fscanf璇诲彇銆俧scanf璇诲彇鏃讹紝榛樿浼氬埌绌虹櫧瀛楃鎴銆傛墍浠ュ鏋滄枃浠朵腑涓嶅瓨鍦ㄥ叾瀹冪┖鐧藉瓧绗︼紝閭d箞鍙互浠scanf瀹炵幇涓娆℃ц鍙栧琛岀殑鏁堟灉锛屾瘮濡傛枃浠朵腑瀛樺偍涓 12.3name閭d箞瑕佷竴娆℃ц鍙栬繖涓夎鏁版嵁锛屽彲浠ヤ娇鐢細int a;float b;char c[20];fscanf(fp, "%d%f%s",&a,&b,c);鍏朵腑锛宖p涓烘墦寮璇ユ枃浠剁殑鏂囦欢...
绛旓細if(NULL==fp) return -1;//瑕佽繑鍥為敊璇唬鐮 while(fscanf(fp,"%c",&c)!=EOF) printf("%c",c); //浠庢枃鏈涓鍏骞跺湪鎺у埗鍙版墦鍗板嚭鏉 fclose(fp);fp=NULL;//闇瑕佹寚鍚戠┖锛屽惁鍒欎細鎸囧悜鍘熸墦寮鏂囦欢鍦板潃 return 0;}
绛旓細鍦–璇█涓紝鏂囦欢鎿嶄綔閮芥槸鐢卞簱鍑芥暟鏉ュ畬鎴愮殑銆傝璇诲彇涓涓猼xt鏂囦欢锛棣栧厛瑕佷娇鐢ㄦ枃浠舵墦寮鍑芥暟fopen锛堬級銆俧open鍑芥暟鐢ㄦ潵鎵撳紑涓涓枃浠锛屽叾璋冪敤鐨勪竴鑸舰寮忎负锛 鏂囦欢鎸囬拡鍚=fopen(鏂囦欢鍚嶏紝浣跨敤鏂囦欢鏂瑰紡) 鍏朵腑锛屸滄枃浠舵寚閽堝悕鈥濆繀椤绘槸琚鏄庝负FILE 绫诲瀷鐨勬寚閽堝彉閲忥紝鈥滄枃浠跺悕鈥濇槸琚墦寮鏂囦欢鐨勬枃浠跺悕銆 鈥滀娇鐢ㄦ枃浠舵柟寮...
绛旓細鐢–璇█浠巘xt鏂囦欢涓鍙栨暟鎹紝鍙互浣跨敤C鏍囧噯搴撴枃浠惰嚜甯︾殑鏂囦欢鎺ュ彛鍑芥暟杩涜鎿嶄綔銆備竴銆佹墦寮鏂囦欢锛欶ILE fopen(const char filename,const char mode);鍥犱负txt鏂囦欢涓烘枃鏈枃浠讹紝鎵浠ユ墦寮鏃堕夋嫨鐨刴ode搴斾负"r"鎴栬"rt"銆備簩銆佽鍙栨枃浠讹細璇诲彇鏂囦欢搴旀牴鎹枃浠跺唴瀹圭殑鏍煎紡锛屼互鍙婄▼搴忚姹傦紝閫夋嫨璇诲彇鏂囦欢鐨勫嚱鏁般傚彲浠ヤ娇鐢...
绛旓細姝ラ1锛氶鍏堥渶瑕佸0鏄庝袱涓枃浠鎸囬拡锛屽苟璁╁畠浠垎鍒寚鍚戞墦寮鐨勬棫鏂囦欢鍜屾柊鏂囦欢锛屽苟妫鏌ユ枃浠舵槸鍚﹁鎵撳紑锛屼互涓嬫槸浠g爜锛欶ILE *f_old = NULL; //鎸囧悜鏃鏂囦欢鐨鏂囦欢鎸囬拡;FILE *f_new = NULL; //鎸囧悜鏂版枃浠剁殑鏂囦欢鎸囬拡;const char *old_name = "D:\\temp\\old.txt"; //鍋囪鏃ф枃浠舵槸D鐩榯emp鏂囦欢澶...
绛旓細1.棣栧厛锛屼娇鐢╒S鏋勫缓涓涓鏂扮殑绌洪」鐩紝鐒跺悗鐩存帴鍗曞嚮ok銆2.鍗曞嚮newitem閫夐」涓篶缂栬瘧鍣ㄥ垱寤轰竴涓柊鐨刢鏂囦欢锛屽苟杈撳叆main.c鏂囦欢銆3.鐒跺悗鍒涘缓涓涓柊鐨勮繑鍥C鏂囦欢锛屽涓嬫墍绀恒4.灏嗕笂闈㈢殑鍙傝冧唬鐮佸鍒跺埌main.c鏂囦欢涓锛屽苟鐩存帴缂栬瘧瀹冦5銆佺紪璇戝畬鎴愬悗锛岃繍琛宔xe绋嬪簭锛屾墽琛屽悗鏄剧ずTXT鏂囦欢鍐呭銆
绛旓細C璇█鍙互浣跨敤fopen锛堬級鍑芥暟璇诲彇txt鏂囨湰閲屻傜ず渚嬶細include <stdio.h> FILE *stream, *stream2;void main( void ){ int numclosed;/* Open for read (will fail if file "data" does not exist) */ if( (stream = fopen( "data", "r" )) == NULL )printf( "The file 'data' was...
绛旓細浠ユ枃鏈柟寮忚鎵撳紑鍘熸枃浠讹紱鎸夊瓧绗︽柟寮璇诲彇鏂囦欢锛屾瘡璇涓涓瀛楃鍒ゆ柇涓涓嬫槸鍚︿负姹夊瓧缂栫爜(<0)锛岃嫢鏄垯瀛樺叆瀛楃鏁扮粍锛屼笉鏄垯璺宠繃璇诲彇涓嬩竴涓瓧绗︼紝鐩村埌鏂囦欢缁撴潫銆傝鍘熸枃浠跺湪褰撳墠鐩綍涓嬶紝鍚嶄负123.txt锛屼妇渚嬩唬鐮佸涓嬶細//#include "stdafx.h"//If the vc++6.0, with this line.#include "stdio.h"#...
绛旓細C璇█璇诲彇鏂囦欢鐨勫叿浣撴楠ゅ涓嬶細鎴戜滑闇瑕佸噯澶囩殑鏉愭枡鍒嗗埆鏄細鐢佃剳銆丆璇█銆1銆侀鍏堟垜浠墦寮闇瑕璇诲彇鐨鏂囦欢锛岀偣鍑绘墦寮宸︿笂瑙鏂囦欢涓殑鈥滃彟瀛樹负鈥濄2銆佺劧鍚庢垜浠湪寮瑰嚭鏉ョ殑绐楀彛涓偣鍑绘墦寮淇濆瓨绫诲瀷銆3銆佺劧鍚庢垜浠湪寮瑰嚭鏉ョ殑绐楀彛涓偣鍑婚夋嫨鈥淐 source file(*.c)鈥濓紝涔嬪悗鐐瑰嚮淇濆瓨鍗冲彲鍦–璇█涓鍙鍑烘潵浜嗐