当前位置: 首页 > news >正文

编程珠玑3-6

问题描述

6.编写一个“格式信函发生器”,使之可以通过数据库中的每条记录来生成定制的文档(这常常称为“邮件归并”特性)。设计简短的模板和输入文件来测试程序的正确性。

分析

信函格式发生器,就是将参数和模板分离,用不同的参数和模板组合后得到不同内容的一种程序。该程序读取模板,然后将参数填入模板内,即可得到新的需要输出的文件

信函格式发生器,好处就是参数和模板分离,实现解耦。想要生成新的文件,改变参数即可,无需更改模板

实现

书本后面并未直接给出答案,而是告诉读者另一本书上有实现代码,并且该代码只有9行。

我自己用python也实现了个9行核心逻辑的程序

如下是模板

Subject: Demographic Information About #1
From: AWK Demographics, Inc.
In response to your request for information about #1,
our latest research has revealed that its population is #2
million people and its area is #3 million square miles.
This gives #1 a population density of #4 people per
square mile.

其中#1, #2…就是需要替代的地方

给定的参数是Canada:25:3.852:6.5,接下来需要将冒号分隔的参数填入模板对应的位置即可

参数值
程序
letter.txt
格式信函
def form_gen(params: str, split: str):params_list = params.split(split)# 读取letter.txtform = []with open('./letter.txt') as file:form = file.readlines()# 参数替换for f in form:temp = ffor i in range(1, len(params_list) + 1):temp = temp.replace('#' + str(i), params_list[i - 1])print(temp, end='')form_gen("Canada:25:3.852:6.5", ":")

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • wofstream写入文件没有反应的解决方案
  • 【腾讯云】AI驱动的数据库TDSQL-C如何是从0到1体验电商可视化分析小助手得统计功能,一句话就能输出目标统计图
  • 基于YOLOv8的PCB缺陷检测算法,加入一种基于内容引导注意力(CGA)的混合融合方案(一)
  • RS485工业通信网关原理详解-天拓四方
  • 2023下半年软考网络规划
  • Qt事件处理机制
  • 记一次Hiveserver2连接异常的解决-腾讯云-emr
  • python进阶篇-day09-数据结构与算法(非线性结构与排序算法)
  • 数据结构(7.2_1)——顺序查找
  • 彻底理解Proxy和Reflect
  • SQL server 6.5升级到SQL server 2019
  • linux基础IO——动静态库——进程编址、进程执行、动态库加载
  • 品读 Java 经典巨著《Effective Java》90条编程法则,第1条:用静态工厂方法代替构造器
  • java:mybatisplus查询功能演示,包括模糊查询
  • 降维打击 华为赢麻了
  • [Vue CLI 3] 配置解析之 css.extract
  • 【347天】每日项目总结系列085(2018.01.18)
  • 08.Android之View事件问题
  • co模块的前端实现
  • CSS实用技巧
  • ECMAScript入门(七)--Module语法
  • Fastjson的基本使用方法大全
  • Git初体验
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • laravel with 查询列表限制条数
  • React系列之 Redux 架构模式
  • spring boot下thymeleaf全局静态变量配置
  • Tornado学习笔记(1)
  • vue自定义指令实现v-tap插件
  • 大快搜索数据爬虫技术实例安装教学篇
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 翻译--Thinking in React
  • 关于List、List?、ListObject的区别
  • 排序算法之--选择排序
  • 前端临床手札——文件上传
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 优化 Vue 项目编译文件大小
  • 原生Ajax
  • 在Docker Swarm上部署Apache Storm:第1部分
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • #if 1...#endif
  • #QT(QCharts绘制曲线)
  • $.ajax()
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)