Go -- log4go日志

折腾:

【已解决】go语言中实现log信息同时输出到文件和控制台(命令行)

期间,已经通过io的MultiWriter搞定了同时输出信息到文件和console,但是不支持level。

所以,再去试试这个log4go。

github.com/keepeye/log4go

 

【折腾过程】

1.大概看了看,貌似功能很强大。

有点类似于之前的C#的NLog,为C#的log功能扩展;

此处log4go,是针对go语言的log功能的扩展。

2.此log4go,是go语言的第三方的包,所以,先要去搞懂:

【记录】go语言中安装第三方包package(库):log4go

3.安装完毕后,再去参考官网的:

http://code.google.com/p/log4go/wiki/GettingStarted

去看看如何使用。

4.先去导入:

?
1
2
//import l4g "log4go.googlecode.com/hg"
import l4g "code.google.com/p/log4go"

结果是:

?
1
2
3
E:\Dev_Root\go\src\EmulateLoginBaidu>go run EmulateLoginBaidu.go
# command-line-arguments
.\EmulateLoginBaidu.go:34: imported and not used: "code.google.com/p/log4go"

这说明:

正确导入了(但只是暂时还没去使用而已)

5.接着去使用。

用如下代码:

?
1
2
3
4
5
6
7
8
9
10
11
//do some init for crifanLib
func initCrifanLib(){
    l4g.Info("init for crifanLib")
    //gLogger.Println("init for crifanLib");
    gCurCookies = nil
    return
}
//init for logger
func initLogger(){
    l4g.Debug("in initLogger")

效果是:

log4c debug and info output in console

6.看到其解释了:

上述用的,是默认的,已经实现了的,对于console的log

默认配置为:DEBUG的level:debug及以上的level都显示。

所有的level,依次是:Finest, Fine, Debug, Trace, Info, Warning, Error, Critical

而此处,我想要实现:

(1)重新更改此console的level为Info

(2)添加此处的log文件作为输出,且设置level所有,即最低一级的Finest

7.先去添加log文件:

但是想要去看对应的文档的,结果原先作者的说明:

先去:

?
1
godoc -http=:6060

(我此处实际上本身已经打开godoc的server了)

再去打开地址:

http://localhost:6060/pkg/log4go.googlecode.com/svn/stable/

结果肯定不对的。

后来经过自己的分析,去访问:

http://localhost:6060/pkg/code.google.com/p/log4go/

就可以了。

8.去看看对应的:

http://localhost:6060/pkg/code.google.com/p/log4go/#AddFilter

内容是:

func AddFilter

func AddFilter(name string, lvl level, writer LogWriter)

Wrapper for (*Logger).AddFilter 

去试试代码。

结果基本实现了所要的效果:

console only show info

log file can also show debug

即:

对于代码中debug信息,只在文件中显示

对于info及以上的信息,console和文件,都显示。

实现了level的自定义。

9.目前,唯一一个小问题,不是我喜欢的:

对于,我经常调试程序,

希望每次重新运行时,对于log文件,都自动清空。

而不要对于log文件是APPEND模式:

每次的输出,都添加到后面。

而不清空log文件。

10.所以,再去想办法,新建log时,判断是否已经存在文件,如果存在去删除掉:

【已解决】go语言中判断文件是否存在如果有已存在则删除

 

【总结】

最终,基本实现了全部的效果:

1.每次运行程序,可以OVERWRITE旧的log文件,而不是APPEND

2.可以同时输出内容到log文件和console

3.且console和log文件的输出level都可以配置:

此处要的是:

INFO及以上的,都可以在console中显示;

全部信息(包括debug),都可以在log文件中显示。

全部代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/*
 * [File]
 * EmulateLoginBaidu.go
 *
 * [Function]
 * 【记录】用go语言实现模拟登陆百度
 * http://www.crifan.com/emulate_login_baidu_using_go_language/
 *
 * [Version]
 * 2013-09-19
 *
 * [Contact]
 * http://www.crifan.com/about/me/
 */
package main
import (
    //"fmt"
    //"builtin"
    //"log"
    "os"
    "runtime"
    "path"
    "strings"
    //"io"
    "time"
    "io/ioutil"
    "net/http"
    //"net/http/cookiejar"
    //"sync"
    //"net/url"
)
//import l4g "log4go.googlecode.com/hg"
//import l4g "code.google.com/p/log4go"
import "
github.com/keepeye/log4go
"
/***************************************************************************************************
    Global Variables
***************************************************************************************************/
var gCurCookies []*http.Cookie;
//var gLogger *log.Logger;
var gLogger log4go.Logger;
/***************************************************************************************************
    Functions
***************************************************************************************************/
//do init before all others
func initAll(){
    gCurCookies = nil
    gLogger = nil
     
    initLogger()
    initCrifanLib()
}
//de-init for all
func deinitAll(){
    gCurCookies = nil
    if(nil == gLogger) {
        gLogger.Close();
        gLogger = nil
    }
}
//do some init for crifanLib
func initCrifanLib(){
    gLogger.Debug("init for crifanLib")
    gCurCookies = nil
    return
}
//init for logger
func initLogger(){
    var filenameOnly string
    filenameOnly = GetCurFilename()
    var logFilename string =  filenameOnly + ".log";
     
    //gLogger = log4go.NewLogger()
    gLogger = make(log4go.Logger)
    //for console
    //gLogger.AddFilter("stdout", log4go.INFO, log4go.NewConsoleLogWriter())
    gLogger.AddFilter("stdout", log4go.INFO, log4go.NewConsoleLogWriter())
    //for log file
    if _, err := os.Stat(logFilename); err == nil {
        //fmt.Printf("found old log file %s, now remove it\n", logFilename)
        os.Remove(logFilename)
    }
    //gLogger.AddFilter("logfile", log4go.FINEST, log4go.NewFileLogWriter(logFilename, true))
    gLogger.AddFilter("logfile", log4go.FINEST, log4go.NewFileLogWriter(logFilename, false))
    gLogger.Info("Current time is : %s", time.Now().Format("15:04:05 MST 2006/01/02"))
    return
}
// GetCurFilename
// Get current file name, without suffix
func GetCurFilename() string {
    _, fulleFilename, _, _ := runtime.Caller(0)
    //fmt.Println(fulleFilename)
    var filenameWithSuffix string
    filenameWithSuffix = path.Base(fulleFilename)
    //fmt.Println("filenameWithSuffix=", filenameWithSuffix)
    var fileSuffix string
    fileSuffix = path.Ext(filenameWithSuffix)
    //fmt.Println("fileSuffix=", fileSuffix)
     
    var filenameOnly string
    filenameOnly = strings.TrimSuffix(filenameWithSuffix, fileSuffix)
    //fmt.Println("filenameOnly=", filenameOnly)
     
    return filenameOnly
}
//get url response html
func GetUrlRespHtml(url string) string{
    gLogger.Debug("GetUrlRespHtml, url=%s", url)
    var respHtml string = "";
     
    resp, err := http.Get(url)
    if err != nil {
        gLogger.Warn("http get url=%s response errror=%s\n", url, err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    //gLogger.Debug("body=%s\n", body)
    gCurCookies = resp.Cookies()
     
    respHtml = string(body)
    return respHtml
}
func printCurCookies() {
    var cookieNum int = len(gCurCookies);
    gLogger.Info("cookieNum=%d", cookieNum)
    for i := 0; i < cookieNum; i++ {
        var curCk *http.Cookie = gCurCookies[i];
        //gLogger.Info("curCk.Raw=%s", curCk.Raw)
        gLogger.Info("------ Cookie [%d]------", i)
        gLogger.Info("Name\t=%s", curCk.Name)
        gLogger.Info("Value\t=%s", curCk.Value)
        gLogger.Info("Path\t=%s", curCk.Path)
        gLogger.Info("Domain\t=%s", curCk.Domain)
        gLogger.Info("Expires\t=%s", curCk.Expires)
        gLogger.Info("RawExpires=%s", curCk.RawExpires)
        gLogger.Info("MaxAge\t=%d", curCk.MaxAge)
        gLogger.Info("Secure\t=%t", curCk.Secure)
        gLogger.Info("HttpOnly=%t", curCk.HttpOnly)
        gLogger.Info("Raw\t=%s", curCk.Raw)
        gLogger.Info("Unparsed=%s", curCk.Unparsed)
    }
}
func main() {
    initAll()
    gLogger.Info("this is EmulateLoginBaidu.go")
    var baiduMainUrl string
    baiduMainUrl = "http://www.baidu.com/";
    //baiduMainUrl := "http://www.baidu.com/";
    //var baiduMainUrl string = "http://www.baidu.com/";
    gLogger.Info("baiduMainUrl=%s", baiduMainUrl)
    respHtml := GetUrlRespHtml(baiduMainUrl)
    gLogger.Debug("respHtml=%s", respHtml)
    printCurCookies()
     
    deinitAll()
}

效果是:

 

console中输出的内容:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
E:\Dev_Root\go\src\EmulateLoginBaidu>go run EmulateLoginBaidu.go
[09/20/13 18:39:40] [INFO] Current time is : 18:39:40 +0800 2013/09/20
[09/20/13 18:39:40] [INFO] this is EmulateLoginBaidu.go
[09/20/13 18:39:40] [INFO] baiduMainUrl=http://www.baidu.com/
[09/20/13 18:39:40] [INFO] cookieNum=3
[09/20/13 18:39:40] [INFO] ------ Cookie [0]------
[09/20/13 18:39:40] [INFO] Name =BDSVRTM
[09/20/13 18:39:40] [INFO] Value        =3
[09/20/13 18:39:40] [INFO] Path =/
[09/20/13 18:39:40] [INFO] Domain       =
[09/20/13 18:39:40] [INFO] Expires      =0001-01-01 00:00:00 +0000 UTC
[09/20/13 18:39:40] [INFO] RawExpires=
[09/20/13 18:39:40] [INFO] MaxAge       =0
[09/20/13 18:39:40] [INFO] Secure       =false
[09/20/13 18:39:40] [INFO] HttpOnly=false
[09/20/13 18:39:40] [INFO] Raw  =BDSVRTM=3; path=/
[09/20/13 18:39:40] [INFO] Unparsed=[]
[09/20/13 18:39:40] [INFO] ------ Cookie [1]------
[09/20/13 18:39:40] [INFO] Name =H_PS_PSSID
[09/20/13 18:39:40] [INFO] Value        =3415_1431_2975_2981
[09/20/13 18:39:40] [INFO] Path =/
[09/20/13 18:39:40] [INFO] Domain       =.baidu.com
[09/20/13 18:39:40] [INFO] Expires      =0001-01-01 00:00:00 +0000 UTC
[09/20/13 18:39:40] [INFO] RawExpires=
[09/20/13 18:39:40] [INFO] MaxAge       =0
[09/20/13 18:39:40] [INFO] Secure       =false
[09/20/13 18:39:40] [INFO] HttpOnly=false
[09/20/13 18:39:40] [INFO] Raw  =H_PS_PSSID=3415_1431_2975_2981; path=/; domain=.baidu.com
[09/20/13 18:39:40] [INFO] Unparsed=[]
[09/20/13 18:39:40] [INFO] ------ Cookie [2]------
[09/20/13 18:39:40] [INFO] Name =BAIDUID
[09/20/13 18:39:40] [INFO] Value        =AF99372EE54C9816618EED94475DDD26:FG=1
[09/20/13 18:39:40] [INFO] Path =/
[09/20/13 18:39:40] [INFO] Domain       =.baidu.com
[09/20/13 18:39:40] [INFO] Expires      =0001-01-01 00:00:00 +0000 UTC
[09/20/13 18:39:40] [INFO] RawExpires=Fri, 20-Sep-43 10:39:32 GMT
E:\Dev_Root\go\src\EmulateLoginBaidu>

log文件中输出的内容:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[2013/09/20 18:39:40 ] [INFO] (main.initLogger:91) Current time is : 18:39:40 +0800 2013/09/20
[2013/09/20 18:39:40 ] [DEBG] (main.initCrifanLib:68) init for crifanLib
[2013/09/20 18:39:40 ] [INFO] (main.main:159) this is EmulateLoginBaidu.go
[2013/09/20 18:39:40 ] [INFO] (main.main:165) baiduMainUrl=http://www.baidu.com/
[2013/09/20 18:39:40 ] [DEBG] (main.GetUrlRespHtml:117) GetUrlRespHtml, url=http://www.baidu.com/
[2013/09/20 18:39:40 ] [DEBG] (main.main:167) respHtml=<!DOCTYPE html><!--STATUS OK--><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"><title>百度一下,你就知道</title><style >html,.......... new Date(_t + 10000).toGMTString()})}catch(e){}</script></html><!--0556c44ca22cac33-->
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:137) cookieNum=3
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:141) ------ Cookie [0]------
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:142) Name   =BDSVRTM
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:143) Value  =3
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:144) Path   =/
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:145) Domain =
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:146) Expires    =0001-01-01 00:00:00 +0000 UTC
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:147) RawExpires=
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:148) MaxAge =0
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:149) Secure =false
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:150) HttpOnly=false
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:151) Raw    =BDSVRTM=3; path=/
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:152) Unparsed=[]
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:141) ------ Cookie [1]------
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:142) Name   =H_PS_PSSID
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:143) Value  =3415_1431_2975_2981
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:144) Path   =/
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:145) Domain =.baidu.com
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:146) Expires    =0001-01-01 00:00:00 +0000 UTC
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:147) RawExpires=
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:148) MaxAge =0
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:149) Secure =false
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:150) HttpOnly=false
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:151) Raw    =H_PS_PSSID=3415_1431_2975_2981; path=/; domain=.baidu.com
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:152) Unparsed=[]
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:141) ------ Cookie [2]------
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:142) Name   =BAIDUID
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:143) Value  =AF99372EE54C9816618EED94475DDD26:FG=1
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:144) Path   =/
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:145) Domain =.baidu.com
[2013/09/20 18:39:40 ] [INFO] (main.printCurCookies:146) Expires    =0001-01-01 00:00:00 +0000 UTC

整体效果还不错的说。

转载于:https://www.cnblogs.com/mafeng/p/6839592.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter响应中中文乱码怎么解决?

在jmeter的bin目录下有一个jmeter.properties的文件&#xff0c;打开它&#xff0c;搜索sampleresult.default.encoding&#xff0c;把它的注释打开&#xff0c;也就是把最前面的#去掉&#xff0c;改成sampleresult.default.encodingUTF-8&#xff0c;保存&#xff0c;重新打开…

三星java3倍拍照手机_全世界拍照最强的两款手机,一个是三星,一个是它

原标题&#xff1a;全世界拍照最强的两款手机&#xff0c;一个是三星&#xff0c;一个是它要说到手机拍照&#xff0c;三星S7毫无疑问是现阶段公认拍照最好的安卓手机&#xff0c;而这很大一定程度上取决于F1.7大光圈和先进的双核对焦技术。而在最近非常火的一款国产新机OPPO R…

java中抓阄_如何进行抓阄

展开全部步骤&#xff1a;1、设计总体中的N个个体编号。2、把号码写在号e68a84e8a2ad3231313335323631343130323136353331333431366366签上&#xff0c;将号签放在一个容器中搅拌均匀。3、每次从中抽取一个号签&#xff0c;连续不放回抽取n次。4、将取出的n个号签上所对应的n个…

ARMV8 datasheet学习笔记5:异常模型

1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4&#xff1a;AArch64系统级体系结构之编程模型&#xff08;1&#xff09;-EL/ET/ST 一文 3. 异常处理路由对比 AArch32、AArch64架构下IRQ 和Data Abort 异常处理流程图对比. 3.1 IRQ 路由 3.1.1. AArch32 IRQ 路由 图 AAr…

leetcode 三数之和 python_16.leetcode题目讲解(Python):最接近的三数之和

题目如下&#xff1a;题目这道题可以用排一些特殊情况&#xff0c;减少计算量&#xff0c; 参考代码如下&#xff1a;class Solution:def threeSumClosest(self, nums, target):""":type nums: List[int]:type target: int:rtype: int"""# 如果只…

给GridView设置行高

近期在工作中遇到了这样一个问题,使用一个GridView展示数据,item中仅仅是一个TextView,可是里面显示的文字多少不固定多少,必须所有展示出来. 遇到的问题: 1.把item中的宽和高设置match_parent,还是设置成wrap_content,当内容过多的时候,会覆盖下一行的显示的内容. 2.没有一个属…

C#的基础数据类型

一、概述 C# 的类型系统是统一的&#xff0c;因此任何类型的值都可以按对象处理。C# 中的每个类型直接或间接地从 object 类类型派生&#xff0c;而 object 是所有类型的最终基类。C#的数据类型主要分为三类&#xff1a;值类型、引用类型和指针类型&#xff08;如下图所示&…

[luoguP2957] [USACO09OCT]谷仓里的回声Barn Echoes(Hash)

传送门 团队里的hash水题&#xff0c;数据小的不用hash都能过。。 也就是前缀hash&#xff0c;后缀hash&#xff0c;再比较一下就行。 ——代码 1 #include <cstdio>2 #include <cstring>3 #define ULL unsigned long long4 5 int n, m, ans;6 char s1[81], s2[81]…

【NOI2001】炮兵阵地

【题意】 给定一张n*m的图&#xff0c;每个位置要么是P&#xff0c;要么是H。P的位置可以放炮兵&#xff0c;H则不行。炮兵会朝四个方向&#xff0c;距离2个单位的方格进行攻击&#xff0c;求在没有炮兵互伤的情况下&#xff0c;最多能放的炮兵数量。 【题解】 这道题死坑。 一…

mysql怎么插入10w测试数据_mysql快速插入100万测试数据

向数据库添加100W条测试数据&#xff0c;直接在普通表中添加速度太慢&#xff0c;可以使用内存表添加&#xff0c;然后将内存表数据复制到普通表。创建表内存表DROP TABLE IF EXISTS test_memory;CREATE TABLE test_memory (id INT (11) NOT NULL AUTO_INCREMENT,item1 VARCHAR…

android:Android中用文件初始化sqlite数据库(zz)

很多时候在应用安装初始化时&#xff0c;需要创建本地数据库&#xff0c;同时为数据库添加数据&#xff0c;之后再从数据库中读取数据。这里有2个思路1.先在本地创建一个能支持android使用的sqlite数据库文件,启动时,用现成的sqlite的二进制文件进行直接copy到Android系统的数据…

面向对象-继承

继承&#xff1a; 概念&#xff1a; 继承父类的属性和行为&#xff0c;使得子类对象可以直接具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。继承是多态的前提&#xff0c;如果没有继承&#xff0c;就没有多态。 特点&#xff1a; java只能单…

monkeyrunner脚本的录制和回放

参考&#xff1a;http://www.cnblogs.com/android-host/p/5378996.html 需要条件&#xff1a; 1.android-sdk 2.monkey_recorder.py 3.monkey_playback.py 操作步骤&#xff1a; 1)新建monkey_recorder.py文件&#xff0c;复制以下代码&#xff1a; #!/usr/bin/env monkeyrunne…

php session作用,PHP中Session的作用

PHP session变量的作用是&#xff1a;存储用户的session信息&#xff0c;或者改变用户的session设置。Session变量储存了一个单一用户的信息&#xff0c;它可以被所有的页面使用。PHP Session变量当你在自己的计算机上运行一个应用程序时&#xff0c;你打开它&#xff0c;对他做…

Vuex核心知识(2.0)

Vuex核心知识&#xff08;2.0&#xff09; 转自&#xff1a;http://www.cnblogs.com/ghost-xyx/p/6380689.html Vuex 是一个专门为 Vue.js 应该程序开发的状态管理模式&#xff0c;它类似于 Redux 应用于 React 项目中&#xff0c;他们都是一种 Flux 架构。相比 Redux&#xff…

java带权连通图上最小权边,连通图最小生成树的算法及实现

连通图的最小生成树生成树定义&#xff1a;无向连通图G的极小连通子图&#xff0c;称为它的生成树。(n个顶点&#xff0c;n-1条边)考虑一下下面这个图上图是一个完全图&#xff0c;它的生成树不是唯一的&#xff0c;我们列出最特殊的两种情况上面2个图都是第一个完全图的生成树…

php 区位码字符,php汉字如何转区位码

php汉字转区位码的方法&#xff1a;首先创建一个PHP示例文件&#xff1b;然后通过“sprintf("%02d%02d",ord($t1[0])-160,ord($t1[1])-160);”方法实现汉字转区位码即可。推荐&#xff1a;《PHP视频教程》PHP中实现汉字转区位码应用源码实例解析PHP里如何实现汉字转区…

频谱扩展 matlab,简单的直接扩展频谱通信系统仿真分析

随着通信技术的迅猛发展&#xff0c;扩展频谱通信技术的优点已经越来越明显并被接受&#xff0c;并在各个领域得到了广泛的应用。同时随着计算机技术和仿真技术的日益发展和应用&#xff0c;如何应用一些方便、友好的软件对通信系统进行直观的模型仿真&#xff0c;并进行仿真结…

matlab保存格式可以用cad打开文件,怎么将TXT文件导入CAD中生成图形

我们可以先把TXT文件转换成WORD或是EXCEL表格里。然后再把转换后的WORD或是EXCEL表格导入到CAD图纸中。这里以迅捷CAD编辑器为例&#xff0c;演示如下&#xff1a;步骤一&#xff1a;还是需要在电脑桌面上安装迅捷CAD编辑器。并进入到软件的操作界面。步骤二&#xff1a;双击打…

[Hnoi2006]马步距离

1285: [Hnoi2006]马步距离 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 36 Solved: 16[Submit][Status][Web Board]Description 在国际象棋和中国象棋中&#xff0c;马的移动规则相同&#xff0c;都是走“日”字&#xff0c;我们将这种移动方式称为马步移动。如右图所示&…