C# WinForm如何将批量XY坐标转为指定格式航点命令并导出TXT
需求说明
开发Windows Form简易工具,粘贴多组XY坐标列表后点击按钮,可将坐标批量转换为指定格式的航点命令,每行一条,最终输出为TXT文本文件。
输入坐标格式示例
65737,163129 -21687,-27399 164089,50153 164649,63465 -28663,140057 -28951,110329 149833,-30231
期望输出航点命令格式示例
waypoint:WLM 1:1:78168:~:1560:1:true:0:gui.xaero_default:false:0:false waypoint:WLM 2:2:919432:~:154200:11:true:0:gui.xaero_default:false:0:false waypoint:WLM 3:3:791080:~:15624:0:true:0:gui.xaero_default:false:0:false waypoint:WLM 4:4:79288:~:16968:6:true:0:gui.xaero_default:false:0:false waypoint:WLM 5:5:79064:~:155702:9:true:0:gui.xaero_default:false:0:false
修正后实现代码
原有代码存在坐标拆分逻辑错误、循环冗余、重复写入覆盖文件的问题,以下是可直接运行的实现:
private void button2_Click(object sender, EventArgs e) { List<string> allWaypoints = new List<string>(); // 拆分输入的每一行坐标 string[] inputLines = richTextBox1.Text.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); // 读取自定义配置参数 string name = nametextbox.Text; string initials = initialstextbox.Text; int startNum = (int)startingnumberb.Value; // 固定格式后缀 const string fixedSuffix = ":true:0:gui.xaero_default:false:0:false"; for (int i = 0; i < inputLines.Length; i++) { // 拆分单条坐标的X、Y值 string[] xy = inputLines[i].Split(',', StringSplitOptions.RemoveEmptyEntries); if (xy.Length != 2) continue; // 自动跳过格式错误的行 string x = xy[0].Trim(); string y = xy[1].Trim(); int currentIndex = startNum + i; // 按规则拼接航点命令 string singleWaypoint = $"waypoint:{name} {currentIndex}:{initials}:{x}:~:{y}:{currentIndex}{fixedSuffix}"; allWaypoints.Add(singleWaypoint); } // 一次性写入所有内容到文件,默认保存在程序运行目录 string savePath = Path.Combine(Application.StartupPath, "Triwaypt.txt"); File.WriteAllLines(savePath, allWaypoints); // 可选:将结果同步到输出预览窗口 outputwindow.Text = string.Join(Environment.NewLine, allWaypoints); }
关键优化点
- 先按换行拆分输入内容得到每行坐标,再逐行拆分X、Y值,避免坐标混乱
- 用列表存储所有生成的航点后一次性写入文件,避免循环内重复写入导致的内容覆盖
- 用字符串插值拼接命令,逻辑清晰不易出错
- 可自行添加
SaveFileDialog控件实现用户自定义保存路径
内容的提问来源于stack exchange,提问作者Matthew Davis
相关产品推荐
相关产品推荐

