DeepSeek輔助編寫的利用quick_xml把xml轉為csv的rust程序

提示詞

請用rust quickxml庫實現讀取xml的row和c標簽信息,并輸出到csv格式,要求是:數值型c,輸出標簽的內容,字符串型c(t = “inlineStr”),輸出的內容,row的r屬性表是行號,c的r屬性是字母列號行號,如果不連續,就在中間補空列,用逗號分隔各列,一行完全輸出后換行,如果1行全為空,不輸出該行,為便于查對,每行開頭輸出row的r屬性行號,利用內存映射文件實現。只輸出代碼,不干別的。

use quick_xml::events::Event;
use quick_xml::Reader;
use memmap2::Mmap;
use std::fs::File;
use std::io::{self, Write};
use std::path::Path;fn main() -> io::Result<()> {let file_path = "input.xml";let file = File::open(file_path)?;let mmap = unsafe { Mmap::map(&file)? };let mut reader = Reader::from_reader(&mmap[..]);reader.trim_text(true);let mut buf = Vec::new();let mut current_row: Option<u32> = None;let mut current_cells: Vec<Option<String>> = Vec::new();let mut output = io::stdout();loop {match reader.read_event_into(&mut buf) {Ok(Event::Start(ref e)) => {match e.name().as_ref() {b"row" => {if let Some(attrs) = e.attributes().filter_map(Result::ok).find(|a| a.key.as_ref() == b"r") {if let Ok(r_val) = String::from_utf8(attrs.value.to_vec()) {current_row = r_val.parse().ok();}}current_cells.clear();}b"c" => {let mut cell_type = None;let mut cell_ref = None;for attr in e.attributes().filter_map(Result::ok) {match attr.key.as_ref() {b"t" => {cell_type = String::from_utf8(attr.value.to_vec()).ok();}b"r" => {cell_ref = String::from_utf8(attr.value.to_vec()).ok();}_ => {}}}let mut cell_value = None;let mut in_v = false;let mut in_t = false;loop {match reader.read_event_into(&mut buf) {Ok(Event::Start(ref e)) => {match e.name().as_ref() {b"v" => in_v = true,b"t" => in_t = true,_ => {}}}Ok(Event::Text(e)) => {if in_v || in_t {if let Ok(text) = e.unescape() {cell_value = Some(text.to_string());}}}Ok(Event::End(ref e)) => {if e.name().as_ref() == b"c" {break;}if e.name().as_ref() == b"v" {in_v = false;}if e.name().as_ref() == b"t" {in_t = false;}}Ok(Event::Eof) => break,_ => {}}}if let Some(c_ref) = cell_ref {if let Some(col) = parse_column(&c_ref) {while current_cells.len() <= col {current_cells.push(None);}current_cells[col] = cell_value;}}}_ => {}}}Ok(Event::End(ref e)) => {if e.name().as_ref() == b"row" {if let Some(row_num) = current_row {if current_cells.iter().any(Option::is_some) {write!(output, "{}", row_num)?;for cell in &current_cells {write!(output, ",")?;if let Some(val) = cell {write!(output, "\"{}\"", val)?;}}writeln!(output)?;}}current_row = None;current_cells.clear();}}Ok(Event::Eof) => break,Err(e) => {eprintln!("Error reading XML: {}", e);break;}_ => {}}buf.clear();}Ok(())
}fn parse_column(ref_str: &str) -> Option<usize> {let mut col_str = String::new();for c in ref_str.chars() {if c.is_ascii_alphabetic() {col_str.push(c);} else {break;}}if col_str.is_empty() {return None;}let mut col = 0;for c in col_str.chars() {col = col * 26 + (c.to_ascii_uppercase() as usize - 'A' as usize + 1);}Some(col - 1)
}

相應Cargo.toml

[package]
name = "xml-to-csv"
version = "0.1.0"
edition = "2024"[dependencies]
quick-xml = "0.31.0"
memmap2 = "0.9.0"

編譯執行

export CARGO_INCREMENTAL=1
export PATH=/par:/par/mold240/bin:$PATH
cargo build --release/par/xmlcsv/target/release# ./xml-to-csv
1,"1","15519","785","1","17.00","24386.67","0.04","0.02","N","O","35137.0","35107.0","35146.0","DELIVER IN PERSON","TRUCK","to beans x-ray carefull"
2,"1","6731","732","2","36.00","58958.28","0.09","0.06","N","O","35167.0","35123.0","35175.0","TAKE BACK RETURN","MAIL","according to the final foxes. qui"/par# time xmlcsv/target/release/xml-to-csv >quickxml.csvreal    1m28.133s
user    0m5.104s
sys     0m5.273s

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96585.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96585.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96585.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

logback-spring.xml文件說明

項目里剛好用到&#xff0c;用豆包生成以下說明&#xff0c;此處作為記錄。以下是一個 logback-spring.xml 配置文件示例&#xff0c;結合了 Spring Boot 特性&#xff0c;支持環境區分、日志滾動和不同級別日志輸出&#xff0c;并包含詳細注釋&#xff1a;<?xml version&q…

專題:2025社交媒體營銷與電商融合趨勢報告:抖音、小紅書、短劇、直播全拆解|附210+份報告PDF、數據儀表盤匯總下載

原文鏈接&#xff1a;https://tecdat.cn/?p43853 原文出處&#xff1a;拓端抖音號拓端tecdat 3年前&#xff0c;電商還停留在“貨架擺貨、用戶搜關鍵詞下單”的傳統模式&#xff0c;社交媒體只是品牌“打知名度”的輔助工具&#xff1b;如今&#xff0c;用戶刷抖音直播能直接下…

大模型API密鑰生成規則分析

大模型API密鑰生成規則分析 一、核心生成原則與安全基礎 1.1 密碼學安全隨機數生成 大模型API密鑰的核心安全基礎在于高熵值隨機數生成,需滿足以下技術標準: 熵值要求:至少128位(16字節),推薦256位(32字節),通過密碼學安全偽隨機數生成器(CSPRNG)實現 生成算法:…

太陽光度計在光伏電站的用途

太陽光度計在光伏電站中具有多重關鍵用途&#xff0c;能夠為電站的規劃、運行、維護及能效提升提供科學依據。以下是其具體應用場景及價值分析&#xff1a;1. 太陽能資源評估與電站選址優化核心功能&#xff1a;太陽光度計通過測量直接太陽輻射&#xff08;DNI&#xff09;、散…

ArkTS(方舟 TypeScript)全面介紹:鴻蒙生態的核心編程語言

一、引言 隨著鴻蒙(HarmonyOS)的快速演進,開發者生態成為支撐其發展的關鍵因素。無論是手機、平板、智能穿戴,還是車機、IoT 設備,鴻蒙都希望通過“一次開發,多端部署”的理念,讓開發者能夠更高效地構建應用。 為了實現這一目標,華為推出了 ArkTS(方舟 TypeScript)…

領碼方案|Linux 下 PLT → PDF 轉換服務超級完整版:異步、權限、進度(一氣呵成)

本教程給出可直接落地的 Linux 環境下 PLT→PDF 轉換微服務&#xff0c;全鏈路涵蓋&#xff1a;同步/異步模式、JWTRBAC項目域權限、任務狀態與進度、PDF 水印與審計、可觀測性與彈性伸縮&#xff1b;技術棧為 Spring Boot gpcl6&#xff08;GhostPCL&#xff09; Redis S3/O…

基于51單片機的LCD12864萬年歷時鐘

目錄 具體實現功能 設計介紹 資料內容 全部內容 資料獲取 具體實現功能 具體功能&#xff1a; &#xff08;1&#xff09;LCD12864實時顯示當前時間&#xff08;年月日時分秒星期&#xff09;及溫度值&#xff1b; &#xff08;2&#xff09;四個按鍵可調整當前時間值&…

【C++】string類--常見接口及其模擬實現

目錄 1. 遍歷 1.1. 下標operator[ ] 1.2. c_str 1.3. 迭代器 1.4. 范圍for 2. 增 2.1. push_back 2.2. 重載&#xff08;char ch&#xff09; 2.3. appand 2.4. 重載&#xff08;char* ch&#xff09; 2.5. insert&#xff08;任意位置插入&#xff09; 2.5.1. 任意…

SCADA 云化部署核心:WebSocket 協議實現毫秒級遠程控制

在浙江某智慧水廠的中控室里&#xff0c;曾發生過一次驚險的遠程控制失誤&#xff1a;運維人員通過傳統 SCADA 系統&#xff08;工業控制系統的 “大腦”&#xff09;遠程調節水泵轉速&#xff0c;指令發出后&#xff0c;屏幕上卻遲遲沒有反饋 —— 等水泵轉速最終變化時&#…

大數據電商流量分析項目實戰:Day1-2 補充 軟件安裝和Zookeeper

?博客主頁&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客內容》&#xff1a;大數據、Java、測試開發、Python、Android、Go、Node、Android前端小程序等相關領域知識 &#x1f4e2;博客專欄&#xff1a; https://blog.csdn.net/m0_63815035/…

EMC電磁兼容進階3講培訓:專題三 近場探頭和頻譜儀在EMC整改中的應用

一節課&#xff0c;名企實戰型工程師讓你了解近場探頭與頻譜分析儀在EMC整改中的應用&#xff0c;從實際整改測試出發&#xff0c;結合實際項目案例進行講解。一頓聚餐的費用&#xff0c;助您入門一個很有前景的行業&#xff01; 注&#xff1a;不是賣資料&#xff01;不是賣資…

使用動態IP 需要注意什么

網絡安全防護動態IP會頻繁變更&#xff0c;需確保防火墻和殺毒軟件實時更新&#xff0c;防止因IP變動導致的安全漏洞。避免在公共網絡環境下登錄敏感賬戶&#xff0c;建議使用VPN加密連接。服務穩定性管理某些在線服務&#xff08;如遠程辦公、游戲服務器&#xff09;可能因IP變…

GitHub自動化利器:Probot框架實戰指南

引言 在當今快節奏的軟件開發世界中&#xff0c;自動化已成為提高生產力和保證代碼質量的關鍵要素。GitHub作為全球最大的代碼托管平臺&#xff0c;其豐富的API生態系統為自動化提供了無限可能。Probot作為一個基于Node.js的開源框架&#xff0c;專門用于構建GitHub應用程序&a…

第十四屆藍橋杯青少組C++選拔賽[2023.2.12]第二部分編程題(4、最大空白區)

參考程序1&#xff1a;#include <bits/stdc.h> using namespace std;int main() {int N, M;cin >> N >> M;vector<vector<int>> grid(N, vector<int>(M));for (int i 0; i < N; i)for (int j 0; j < M; j)cin >> grid[i][j]…

文心一言-Agent崗三輪面試全記錄

面經分享&#xff5c;文心一言-Agent崗三輪面試全記錄 前段時間面試了 文心一言團隊 - 大模型 Agent 崗&#xff0c;三輪面試下來感觸頗多。整體來說&#xff0c;文心團隊的面試節奏偏“循序漸進”&#xff1a;一面看基礎&#xff0c;二面看綜合素養&#xff0c;三面看思考深度…

【大前端++】幾大特征

大綱 大前端業務模型結構如下&#xff1a; 服務后臺大前端原生系統可定制的終端硬件 1、業務的起點技術結構基于跨平臺前端框架 Electronvue/Rect/其他web框架js/ts FlutterDartvue/Rect/其他web框架js/ts 其他前端框架結構 2、有特定的業務使用場景 人臉識別考勤 數字…

計算機網絡---網絡體系結構

文章目錄1. 網絡的概念1.1 什么是計算機網絡1.2 簡單的計算機網絡1.3 互聯網&#xff08;或因特網&#xff0c;Internet&#xff09;1.4 計算機網絡、互連網和互聯網三者的區別1.5 總結2. 網絡的組成、功能2.1 組成2.1.1 從組成部分看2.1.2 從工作方式看2.1.3 從邏輯功能看2.2 …

機器學習超參數調優全方法介紹指南

本篇文章Master Hyperparameter Tuning in Machine Learning適合希望深入了解超參數調優的讀者。文章的亮點在于介紹了多種調優方法&#xff0c;如手動搜索、網格搜索、隨機搜索、貝葉斯優化和元啟發式算法&#xff0c;并通過實際案例展示了這些方法在復雜模型&#xff08;如CN…

怎么降低 AIGC 生成率?

怎么降低 AIGC 生成率&#xff1f;市面上那些號稱 "AI 降重神器" 的工具真的有用嗎&#xff1f;想和大家聊聊我的看法 ——人工修改生成內容&#xff0c;可能是目前最靠譜的辦法。一、AI 降重工具的實際效果現在很多工具說能通過 AI 降低 AIGC 生成率&#xff0c;原理…

心磁圖 QRS 參數在 Brugada 綜合征心律失常風險分層中的應用

研究背景Brugada 綜合征是一種與致命性室性心律失常及心源性猝死風險相關的遺傳性心臟離子通道病&#xff0c;其典型特征為右胸導聯&#xff08;V1-V3&#xff09;出現特征性ST段抬高&#xff08;1型、2型或3型 Brugada 心電圖表現&#xff09;。然而&#xff0c;靜息心電圖呈現…