Other

python-文件操作

文件操作 读取文件 1.操作文件的第一种方式(读文件) f = open('a.txt',encoding='utf-8') content = f.read() #<class 'str'> print(content,type(content)) #释放资源 f.close() #释放后调用资源 #content1 = f.read() #print(content1) # ValueError: I/O operation on closed file. 注意:在关闭资源后,就不能够读取数据 2.读取文件的第二种方式:这种方式自动释放资源 with open('a.txt',encoding = 'utf-8') as f: content3 = f.read() print(content3) 3.可以自定义读入资源的多少(在read()中填读取的大小即可) with open('a.txt',encoding = 'utf-8') as f: content4 = f.read(30) print(content4) 2.写入文件 1. 写入数据如果不存在,会自动创建 注意:因为Windows支持GBK编码格式,而python支持utf-8格式,所有想要写入中文,就得设置一下编码 encoding = 'utf-8' with open('aa.txt','a',encoding = 'utf-8') as f: f.write('we can english!

国产化之 .NET Core 操作达梦数据库DM8的两种方式

背景 某个项目需要实现基础软件全部国产化,其中操作系统指定银河麒麟,数据库使用达梦V8,CPU平台的范围包括x64、龙芯、飞腾、鲲鹏等。考虑到这些基础产品对.NET的支持,最终选择了.NET Core 3.1。 环境 CPU平台:x86-64 / Arm64 操作系统:银河麒麟 v4 数据库:DM8 .NET:.NET Core 3.1 SDK 达梦自己提供了.NET操作其数据库的SDK,可以通过NuGet安装,也可以通过安装达梦数据库获取。因为NuGet上的版本不知道是谁提供的,所以这里以安装数据库获取相关SDK为例。 在官网下载DM8的数据库安装文件:https://www.dameng.com/list_103.html 下载前需要先登录,随便注册一个帐号就好了。 这里需要选择CPU和操作系统,按照你的开发环境选择即可,下载后按照提示安装。 这里以Windows10为例,安装后SDK文件的位置在:C:\dmdbms\drivers\dotNet 这里边有EF的SDK,也有NHibernate的SDK,不过这篇文章只使用最基础的基于ADO.NET的SDK。 这些SDK在文件夹DmProvider下边,这里还提供了一个Nuget包,可以放到自己的Nuget仓库中,方便内部安装。 可以看到,这个SDK可以支持.NET Core2.0以上的所有.NET版本。 操作数据库 这里提供两种方式:传统的DbHelperSQL方式 和 Dapper 方式。 DbHelperSQL方式 这种方式早年用的比较多,现在还有很多项目在使用,通过定义一组工具方法包装对数据库的各种增删改查操作。下面给出代码: public class DmDbClient { private string connectionString = string.Empty; /// <summary> /// 初始化DMClient的一个新实例 /// </summary> /// <param name=str></param> public DmDbClient(string str) { connectionString = str; } #region 通用快捷方法 /// <summary> /// 执行一条SQL语句,确定记录是否存在 /// </summary> /// <param name=sql>SQL查询语句</param> /// <returns></returns> public bool Exists(string sql) { object obj = GetSingle(sql); int cmdresult; if (Equals(obj, null) || Equals(obj, DBNull.

【转】Delphi 开发跨平台 Android / iOS 程序的多语言

使用 Delphi 的 FireMonkey 框架,开发跨平台的程序,可以做到一个源码,编译成 Windows, Mac OS, Android, iOS,甚至是 Linux 上面运行的程序。 简单说,就是可以开发 Android 和 iOS 的 APP,同时代码不修改也可以运行在 Windows 上和 Mac OS 上面。 如果你发布的 APP 需要给各国用户使用,需要考虑多语言的支持。我之前有博客文章写过如何实现多语言支持: 假期有时间写代码:FireMonkey 之多语言(TLang) 问题简述 数据库的中文内容,在手机系统语言非中文时,显示乱码。此现象出现在 Android 和 iOS 上面。Windows 上面没有此问题。 一些使用多语言框架需要注意的细节 1. 设计期,一个 TLabel 或者其它控件,只要它有 AutoTranslate 属性,将这个属性设置为 True,拿 TLabel 作为例子,在设计期设置好它的 Text 属性为特定的字符串,比如【温度】,然后在语言前述文章里面提到的语言文件里面有【温度=Temperature】这样的翻译内容,则程序运行时,切换了语言,则 TLabel 的 Text 显示的文字内,自动变化为 Temperature 这个翻译后的文字。 2. 运行期:假设运行期,在一个 Button1.OnClick 事件里面,有代码: Label1.Text := '温度';则它仍然显示汉字的温度,不会自动变成英文,即便当前的语言设置是英文。 这里有两种办法解决这个问题。 2.1. 办法一:赋值语句,调用翻译函数,将翻译后的字符串赋值给 Label1,代码: Label1.Text := Translate('温度');这个办法,前述文章提到过。 2.2. 办法二:触发自动翻译,代码: Label1.Text := '温度';TStyleManager.

qt4 gui编程学习笔记

第一章:QT入门 app.exec():将应用程序的控制权传递给QT,进入事件循环中,处于等待模式,等待用户的操作。 可以为部件设置html样式 qt是模拟平台外观来实现好像看起来都是本地程序,而不是说对某个平台进行封装或有一个专门的窗口部件集合 窗口布局管理器(QHBoxLayout。。。)会对放入的部件自动进行重定义其父的部件对象 众多类之间的关系: 第二章:创建对话框 对于定义了信号与槽的类,在类开始的Q_OBJECT宏是必需的 signal和slot本质上都是宏定义 tr(string)函数是翻译成其他语言的标记。 这中的&,表示类快捷键的意思,按下快捷键时,控件接收焦点。 const int &a:常引用,a地址不可修改,指向的内存也不可以修改 布局管理器的addstrech()函数用于设置控件之间的伸缩量 布局管理器是window的直接子对象和控件是平级的 深入介绍信号与槽 槽函数可以是虚函数可以冲在可以公有私有和保护,也可以直接被调用 一个信号可以链接多个槽函数,调用顺序不确定 多个信号可以链接一个槽 一个信号可以链接另外一个信号 原则上信号槽的参数要相同,如果信号参数比槽多,多余的会被直接忽略掉。 Qt的元对象系统: 对cpp进行了扩展,提供两个关键技术:信号槽和内省功能。内省功能对于信号槽是必需的 允许开发者在运行时获得QObject子类的元信息:包括含对象的类名和它所支持的信号与槽的列表,这一机制也支持属性和文本翻译,为Qtscript奠定基础 moc解析Q_Object类的定义并通过cpp函数来提供,moc使用纯cpp实现,所以元对象系统可以在任意的c++编译器上工作。 具体工作机制: 由ui文件生成的ui_ .h文件包含了有关与窗口的一些类的声明 setupUI函数初始化窗体,而且会将有有objectName_signalName()命名惯例的槽和信号链接到一起。 .ui文件是xml格式的 动态对话框:使用QUiLoader载入文件,不需要uic把ui文件转成cpp的代码。 动态对话框可以利用findChild()来访问窗体中中的各个子部件。 能够使得不重新编译就能改变窗体的布局 第三章 创建主窗口 closeEvent是虚函数,当窗口关闭时函数会被自动调用。 载入图片的方法有常见几种: 图片保存到文件,在运行时候载入 把XPM文件包含在源代码中。 使用QT的资源机制。(适用于所支持的任意文件格式,比运行时载入文件更加的方便)资源文件会被编译到可执行文件当中去,因此不用担心会弄丢他们。 通过exec调用的对话框是模态的,通过show调用的是非模态的 QSettings保存了应用程序中与特定平台的东西,win中的是注册表,unix是存储在文本文件,macOS会使用core foundation preference的应用程序编程接口。信息是键值对的方式进行存储。 使用QsplashScreen添加启动画面 坑:使用pixmap读取图片失败,可以看图片格式是否被修改: 如果show调用后不显示,processEvent() 遍历当前应用程序的所有窗口: 第四章:实现应用程序的功能 Qfile和QdataStream实现与平台无关的二进制文件读取接口。

vscode配置c/c++环境

c/c++插件下载 搜索`C/C++ Extension Pack`下载这个扩展包集合 下载MinGW 下载地址:mingw-w64 1.双击安装exe二进制程序 2.在All Packages里面找到并勾选`mingw32-gcc.bin`,`mingw32-gcc-g++.bin`,`mingw32-gdb.bin`。第一个是c语言文件的编译器,第二个是c++的,第三个是用来调试编译后文件的 3.然后点击`Installation`->`Apply all changes` 4.等待安装,估计要一会 5.安装完后,配置环境变量。将MinGW的安装目录下的bin目录添加到系统变量PATH中,我的是`D:\MinGW\bin` 6.在cmd命令行上打`gcc -v` c/c++ 拓展设置 找到这项,将bin目录\g++.exe添加进去 示例程序test.cpp #include <stdio.h> #include <windows.h> int main() { printf(Hello World\n); system(pause); return 0; } 运行和调试 1.vscode左侧菜单栏选择运行和调试图标 2.点击创建launch.json文件 3.编辑launch.json(代码在下面) 4.返回.cpp文件,按F5进行调试,会弹出找不到任务task g++,选择 配置任务,会自动生成 tasks.json 文件 5.编辑tasks.json文件(代码在下面) 6.调试运行 7.如下图则表示运行调试成功 launch.json { version: 0.2.0, configurations: [ { name: g++.exe build and debug active file, type: cppdbg, request: launch, program: ${fileDirname}\\${fileBasenameNoExtension}.

并发编程1

内容概要 UDP协议 UDP协议实战(基于UDP实现简易版本的qq聊天) 操作系统的发展史 多道技术 进程理论 重要概念01 重要概念02 同步异步与阻塞非阻塞结合 内容详情 UDP协议 服务端 import socket server = socket.socket(type=socket.SOCK_DGRAM) # 自己指定UDP协议(默认是TCP协议) server.bind(('127.0.0.1', 8080)) msg, addr = server.recvfrom(1024) print('msg:', msg.decode('utf8')) print('addr:', addr) server.sendto(b'hello baby', addr) 客户端 import socket client = socket.socket(type=socket.SOCK_DGRAM) server_addr = ('127.0.0.1', 8080) # 查找通讯录 client.sendto(b'hello server baby', server_addr) msg, addr = client.recvfrom(1024) print('msg:', msg.decode('utf8')) print('addr:', addr) UDP协议实战 服务端 import socket server = socket.

新媒体dede模板运营推广网站源码,H5网站新闻报道类网站源码(带手机端)

本套织梦模板采用织梦最新内核开发的模板,这款模板使用范围极广,不仅仅局限于一类型的企业,科技资讯、新媒体HTML5运营资讯类的网站都可以用该模板。你只需要把图片和文章内容换成你的即可,颜色都可以修改,改完让你耳目一新的感觉!布局规整,利于用户体验,手工书写DIV+CSS,代码精简。 同一个后台管理 三网合一简单方便,体验极极佳! 1、该模板代码干净整洁; 2、效果相当的炫酷,相当简洁大气高端,模板简单,全部已数据调用,只需后台修改栏目名称即可 3、适用于科技资讯网站源码、新媒体织梦模板、HTML5运营资讯模板; 4、网站手工DIV+css,代码精简,首页排版整洁大方、布局合理、利于SEO、图文并茂、静态HTML; 5、首页和全局重新做了全面优化,方便大家无缝使用; 6、带有XML地图,利于搜索引擎收录和排名优化 源码编号:C144 下载地址:mageym.com

UDP、操作系统发展史、进程

UDP协议 # 服务端 import socket server = socket.socket(type=socket.SOCK_DGRAM) # 指定为udp协议(默认tcp) server.bind(('127.0.0.1', 8080)) msg, addr = server.recvfrom(1024) print('msg:', msg.decode('utf8')) print('addr:', addr) server.sendto(b'csb', addr) # 客户端 import socket client = socket.socket(type=socket.SOCK_DGRAM) server_addr = ('127.0.0.1', 8080) client.sendto(b'qiubabimunieniu', server_addr) msg, addr = client.recvfrom(1024) print('msg:', msg.decode('utf8')) print('addr:', addr) # 实现简易聊天室 # 服务端 import socket server = socket.socket(type=socket.SOCK_DGRAM) server.bind(('127.0.0.1', 8080)) while True: msg, addr = server.recvfrom(1024) print(addr) print(msg.decode('utf8')) back_msg = input('请回复:').strip() server.sendto(back_msg.encode('utf8'), addr) # 客户端1 import socket client = socket.

java 引用数据类型

import java.util.Scanner; //1、导包class Demo01 { public static void main(String[] args) { //2、创建对象: 数据类型 变量名 = new 数据类型 (); Scanner sc=new Scanner(System.in); //3、调用方法 对象名.方法名(); //让用户输入一个整数 System.out.println(请输入一个整数); int num=sc.nextInt();//3 为了后续运算等 给返回值一个变量 System.out.println(你输出的数字为:+num); // 为了美观拼接个字符串 //让用户输入一个小数 System.out.println(请输入一个小数:); double num2 = sc.nextDouble(); System.out.println(你输入的小数为:+num2); //让用户输入一个字符串 System.out.println(请输入你的姓名); String num3 = sc.next(); System.out.println(你的姓名为:+num3); }}  import java.util.Random; //1、导包class Demo02 { public static void main(String[] args) { //2、创建对象 数据类型 变量名 = new 数据类型()' Random r= new Random(); //3、调用方法 对象名.