c 小工具的使用
1. 这是一个gps 数据过滤的小工具,目的是过滤到gps数据中不符合要求的数据,然后转为json 数据
需要两个小工具
bermuda.c ------> 过滤一定范围的数据
geo2json.c ------> 将gps 数据转换成json 格式
指的注意的是 需要在这两个文件的可执行文件中间建立连接管道
先看 bermuda.c 的代码
#include <stdio.h>
int main() {
float latitude;
float longitude;
char info[];
while (scanf("%f,%f,%79[^\n]",&latitude,&longitude,info) == ) {
if (latitude > && latitude < ) {
if (longitude > - && longitude < -) {
printf("%f,%f,%s\n",latitude,longitude,info);
}
}
}
return ;
}
再看geo2json.c 的代码
#include <stdio.h>
int main() {
float latitude;
float longitude;
char info[];
int started = ;
puts("data=[");
while (scanf("%f,%f,%79[^\n]",&latitude,&longitude,info) == ) {
if (started) printf(",\n");
else started = ;
if (latitude < -90.0 || latitude > 90.0) {
// stderr 是标准错误输出,一旦发生错误,不会把错误输入到标准输出的文件中,而是输出到前台
fprintf(stderr, "Invalid latitude: %f\n",latitude);
return ;
}
if (longitude < -180.0 || longitude > 180.0) {
fprintf(stderr, "Invalid longitude: %f\n",longitude);
return ;
}
printf("latitude: %f, longitude : %f, info: '%s'",latitude,longitude,info);
}
puts("\n]");
return ;
}
使用终端 进到 这两个文件的目录下,执行命令 编译成可执行文件
gcc bermuda.c -o bermuda
gcc geo2json.c -o geo2json
然后 建立管道 传入 数据输入文件 到处到文件中outpu.json
(./bermuda | ./geo2json) <spooky.csv> output.json
输入文件 spooky.csv 的文件内容是
30.685163,-68.137207,Type=Yeti
28.304380,-74.575195,Type=UFO
29.132971,-71.136475,Type=Ship
28.343065,-62.753906,Type=Elvis
27.868217,-68.005371,Type=Goatsucker
30.496017,-73.333740,Type=Disappearance
26.224447,-71.477051,Type=UFO
29.401320,-66.027832,Type=Ship
37.879536,-69.477539,Type=Elvis
22.705256,-68.192139,Type=Elvis
27.166695,-87.484131,Type=Elvis
最终输出文件outpu.json 的内容是
data = [
latitude: 30.685163, longitude : -68.137207, info: 'Type=Yeti',
latitude: 28.304380, longitude : -74.575195, info: 'Type=UFO',
latitude: 29.132971, longitude : -71.136475, info: 'Type=Ship',
latitude: 27.868217, longitude : -68.005371, info: 'Type=Goatsucker',
latitude: 30.496017, longitude : -73.333740, info: 'Type=Disappearance',
latitude: 26.224447, longitude : -71.477051, info: 'Type=UFO',
latitude: 29.401320, longitude : -66.027832, info: 'Type=Ship'
]
2. 这是对文件的操作 ,读取文件中的数据,然后根据条件 把符合条件的内容导入到相应的文件中
#include <stdio.h>
#include <stdlib.h>
#include <string.h> int main(int argc , char *argv[]) { char line[];
if (argc != ) { fprintf(stderr, "你必须输入5个参数!");
}
FILE *in = fopen("spooky.csv", "r"); FILE *file1 = fopen(argv[], "w");
FILE *file2 = fopen(argv[], "w");
FILE *file3 = fopen(argv[], "w"); while (fscanf(in, "%79[^\n]\n",line) == ) { if (strstr(line, argv[])) { fprintf(file1, "%s\n",line);
}
else if (strstr(line, argv[])) { fprintf(file2, "%s\n",line);
}
else { fprintf(file3, "%s\n",line);
}
} fclose(file1);
fclose(file2);
fclose(file3); return ;
}
把spooky.csv 和 本代码放到同一目录,然后运行命令
gcc categorize.c -o categorize
编译成功后 在运行命令
./categorize Ship ship.csv Elvis elvis.csv other.csv
就会得到三个文件,分别记录着Ship Elvis 和 其他的信息,

这里使用了命令行参数的功能,用户可以根据一定的规则来动态帅选内容
必须说明的是 main 函数中的参数是很有用的
c 小工具的使用的更多相关文章
- 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...
- 【原】得心应手小工具开发——IE代理快速切换工具
一.引入 因为公司里上外网要经常换IE代理地址,每次切换地址都要进到Internet Options里去设置一番,经常切换的话很是麻烦,由于用了点时间作个小工具来方便自己. 二.实现思路 其实思路很简 ...
- ContentProvider域名替换小工具
开发项目域名想怎么换就怎么换,就是这么任性! 这是一个很有意思的小工具! 这是一个方便开发人员和测试人员的小工具!! 吐槽: 一直在做Android开发,一直总有一个问题存在:做自己公司的apk开发时 ...
- 偷懒小工具 - SSO单点登录通用类(可跨域)
写在前面的话 上次发布过一篇同样标题的文章.但是因为跨域方面做得不太理想.我进行了修改,并重新分享给大家. 如果这篇文章对您有所帮助,请您点击一下推荐.以便有动力分享出更多的"偷懒小工具&q ...
- [原创] Delphi小工具(Windows资源管理器右键菜单扩展)
两个小工具 1. 项目临时文件清理 2. Android Ndk 编译 c/c++ jni 源码工具. 下载后,点击Reg.bat就可以完成注册安装.不需要时点击 UnReg.Bat 就可以删除菜单. ...
- 介绍两个Ubuntu上的桌面小工具
经常使用Windows10,Sticky Notes和壁纸自动切换功能挺好用的.我经常会使用Sticky Notes来记录一些信息,内容是实时保存的,而且启动的时候会自动显示在桌面上.其实Ubuntu ...
- WPF根据Oracle数据库的表,生成CS文件小工具
开发小工具的原因: 1.我们公司的开发是客户端用C#,服务端用Java,前后台在通讯交互的时候,会用到Oracle数据库的字段,因为服务器端有公司总经理开发的一个根据Oracle数据库的表生成的cla ...
- WPF开发查询加班小工具
先说一下,我们公司是六点下班,超过7点开始算加班,但是加班的时间是从六点开始计算,以0.5个小时为计数,就是你到了六点半,不算加班半小时,但是加班到七点半,就是加班了一个半小时. 一.打卡记录 首先, ...
- 写个C#命令行参数解析的小工具
最近测试工作做的比较多因此时常要创建一些控制台类型的应用程序.因为程序有不同的参数开关,需要在程序启动的时候通过命令行来给程序传递各种开关和参数.直接操作args有些不方便,所以就写了个解析参数的小工 ...
随机推荐
- Centos——安装JDK
写在前面: Just mark! 创建linux虚拟机的时候经常要安装JDK,配置环境变量,却又经常忘记,这里记录一下. 环境:Centos-6.8-x86_64-minimal JDK :jdk-7 ...
- 多线程的通信和同步(Java并发编程的艺术--笔记)
1. 线程间的通信机制 线程之间通信机制有两种: 共享内存.消息传递. 2. Java并发 Java的并发采用的是共享内存模型,Java线程之间的通信总是隐式执行,通信的过程对于程序员来说是完全透 ...
- [转]利用URLConnection来发送POST和GET请求
URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取U ...
- 前端学HTTP之日志记录
前面的话 几乎所有的服务器和代理都会记录下它们所处理的HTTP事务摘要.这么做出于一系列的原因:跟踪使用情况.安全性.计费.错误检测等等.本文将谥介绍日志记录 记录内容 大多数情况下,日志的记录出于两 ...
- css居中div的几种常用方法
在开发过程中,很多需求需要我们居中一个div,比如html文档流当中的一块div,比如弹出层内容部分这种脱离了文档流等.不同的情况有不同的居中方式,接下来就分享下一下几种常用的居中方式. 1.text ...
- javascript设计模式:策略模式
前言 策略模式有效利用组合.委托.多态等技术和思想,可以有效避免多重条件选择语句. 策略模式对开放-封闭原则提供了很好的支持,将算法封装在strategy中,使得他们易于切换.理解.扩展. 策略模式中 ...
- redis成长之路——(二)
redis操作封装 针对这些常用结构,StackExchange.Redis已经做了一些封装,不过在实际应用场景中还必须添加一些功能,例如重试等 所以对一些常功能做了一些自行封装SERedisOper ...
- Js 数组返回去重后的数据
function removeRepeat(data) { var temp = ""; var mainData = []; for (var i = 0; i < dat ...
- chattr用法
[root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...
- ASP.NET Aries 2.0 发布(原来的源码SVN已关闭,开源源码已迁移到GitHub)
主要更新: 1:增加子目录部署支持. 2:增加Taurus.MVC支持. 3:优化及Bug修复. 1:增加子目录部署支持: 其实在重写Aries框架的时候,我是去掉了目录部署功能的,主要是为了加快Ar ...