字符读取函数的应用

下面的演示程序实现从/etc/passwd文件中提取用户名,打印到屏幕上并保存在copyname.txt文件中
使用的函数是getc()、putc()、putchar()

[c]
#include <stdio.h>

int main()
{
FILE *fpr, *fpw;
int c = 0, f = 0;
/* 以下打开源文件 */
if((fpr = fopen("/etc/passwd", "r")) == NULL)
{
printf("open file /etc/passwd failes.\n");
return;
}
/* 以下打开目标文件*/
if((fpw = fopen("./copyname.txt", "w")) == NULL)
{
printf("open file ./copyname.txt failed.\n");
fclose(fpr);
return;
}
while((c = getc(fpr)) != EOF)
{
/* 字符已经读取到了c */
if(f == 0)
{
if(c != ':')
putchar(putc(c, fpw));
else
f = 1;
}
else if(c == '\n')
{
f = 0;
putchar(putc(c, fpw));
}
}
fclose(fpr);
fclose(fpw);

return 0;
}
[/c]

行读写函数的应用

下面这个演示程序是按行来获取数据的

[c]
#include <stdio.h>

int main()
{
FILE *fpr, *fpw;
char buf[1024], *p1, *p2;
/* 打开源文件 */
if((fpr = fopen("/etc/passwd", "r")) == NULL)
{
printf("open /etc/passwd file failed.\n");
return;
}
/* 打开目标文件 */
if((fpw = fopen("./copynameid.txt", "w")) == NULL)
{
printf("open ./copynameid.txt failed.\n");
fclose(fpr);
return;
}

memset(buf, 0, sizeof(buf));

while(fgets(buf, sizeof(buf), fpr) != NULL)
{
/* p1指向第一个":",p2指向第二个":" */
if((p1 = strstr(buf, ":")) == NULL) break;
if((p2 = strstr(p1+1, ":")) == NULL) break;
p1++; p2++;
/* p1指向第二个域密码字段,p2指向第三个域用户ID字段 */
/* 以下代码移动字符串内容,将ID字段的内容移动到用户名字段后 */
while(*p2 != ':')
{
*p1 = *p2;
p1++; p2++;
}
*p1 = 0;
/* 屏幕输出 */
puts(buf);
/* 文件输出 */
fputs(buf, fpw);
fputs("\n", fpw);
/* 清楚内存 */
memset(buf, 0, sizeof(buf));
}
fclose(fpr);
fclose(fpw);

return 0;
}
[/c]

输出省略。这个程序很有意思的地方是在buf中利用指针直接判断并修改数据

越学越有意思呢

UC编程:字符读取与行读取的更多相关文章

  1. Java中文本文件的读取(按行读取)

    在之前的学习过程中,经常会遇到将文本文件中的数据读取到数组或其他数据结构中.每次遇到,总是在网上搜索代码解决,解决之后并没有总结复习,因此在下一次遇到同样的问题时,又重复之前的过程.这样周而复始,并没 ...

  2. 关于一些对map和整行读取文件操作

    public static void main(String[] args) { Map<String, String> map = new HashMap<String, Stri ...

  3. C++/Php/Python/Shell 程序按行读取文件或者控制台

    写程序经常需要用到从文件或者标准输入中按行读取信息,这里汇总一下.方便使用 1. C++ 读取文件 #include<stdio.h> #include<string.h> i ...

  4. C++中文件按行读取和逐词读取 backup

    http://blog.csdn.net/zhangchao3322218/article/details/7930857 #include  <iostream>#include  &l ...

  5. Python跳过第一行读取文件内容

    Python编程时,经常需要跳过第一行读取文件内容.比较容易想到是为每行设置一个line_num,然后判断line_num是否为1,如果不等于1,则进行读取操作.相应的Python代码如下: inpu ...

  6. java按行读取txt并按行写入

    IO流想必大家都很熟悉了,本次实现的需求是按行读取文件内容并且按行写入,代码如下: try { String encoding="utf-8"; //设定自己需要的字符编码集 Fi ...

  7. c++ 按行读取txt文本

    CStdioFile 类的声明保存在 afx.h 头文件中. CStdioFile 类继承自 CFile 类, CStdioFile 对象表示一个用运行时的函数 fopen 打开的 c 运行时的流式文 ...

  8. Java利用内存映射文件实现按行读取文件

    我们知道内存映射文件读取是各种读取方式中速度最快的,但是内存映射文件读取的API里没有提供按行读取的方法,需要自己实现.下面就是我利用内存映射文件实现按行读取文件的方法,如有错误之处请指出,或者有更好 ...

  9. python 按每行读取文件怎么去掉换行符

    python按每行读取文件后,会在每行末尾带上换行符,这样非常不方便后续业务处理逻辑,需要去掉每行的换行符,怎么去掉呢?看下面的案例: >>> a = "hello wor ...

随机推荐

  1. C++ Primer 学习笔记_41_STL实践与分析(15)--先来看看算法【下一个】

    STL实践与分析 --初窥算法[下] 一.写容器元素的算法 一些算法写入元素值.在使用这些算法写元素时一定要当心.必须.写入输入序列的元素 写入到输入序列的算法本质上是安全的--仅仅会写入与指定输入范 ...

  2. IOS获得各种文档文件夹路径的方法

    iphone沙箱模型的有四个目录,各自是什么,永久数据存储一般放在什么位置.得到模拟器的路径的简单方式是什么. documents,tmp.app,Library. (NSHomeDirectory( ...

  3. oracle之sql语句优化

    oracle之sql语句优化 sql语句的优化 1.在where子句中使用 is null 或 is not null 时,oracle优化器就不能使用索引了. 2.对于有连接的列,即使最有一个是静态 ...

  4. SQL2000 MD5加密

    原文:SQL2000 MD5加密 /***************************************************************************** * Na ...

  5. Android Widget 小部件(四---完结) 使用ListView、GridView、StackView、ViewFlipper展示Widget

    官方有话这样说: A RemoteViews object (and, consequently, an App Widget) can support the following layout cl ...

  6. POJ 3692:Kindergarten(最大的使命)

    id=3692">Kindergarten Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4920   Ac ...

  7. Hadoop之——CentOS构造ssh否password登录注意事项

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46388809 前提配置:使用root登录改动配置文件:/etc/ssh/sshd_ ...

  8. cer证书签名验证

    一个cer还需要一个签名的证书本身,这是为了防止cer证书被篡改. 有两种类型的证书: 1. 根证书 2. 由根证书颁发子证书. 特根证书.它是自签名. 而其它子证书的签名公钥都保存在它的上级证书里面 ...

  9. windows下系统移植到linux下出现的问题

    今天遇到了一个之前没有遇到的问题,记录一下. 我们是在windows下进行开发的,最终系统是部署在linux服务器上. 在windows一切正常,但是部署到linux下时,有些功能不能用了.通过log ...

  10. C++ 在dynamic_cast&lt;&gt;用法

    /*这是从网上断开的试样.主要是关于 dynamic_cast<> 用法.*/ /* 行动:对象指向一个基类(或参考)cast一个指向派生类,dynamic_cast将基于一个基类指针确实 ...