Resource File

本文探讨了在C#中使用正则表达式进行文本处理的技术,包括读取和解析源代码文件,匹配特定模式,并将匹配结果整合到资源文件中。通过实例演示了如何使用正则表达式来提取特定文本片段,并将其插入到资源文件的XML结构中。

 http://blog.youkuaiyun.com/cnkiminzhuhu/archive/2008/12/16/3532466.aspx

http://topic.youkuaiyun.com/u/20080115/15/3c74b641-e780-47ad-9e9c-ede801c06056.html

 

 

            //this.textBox1.AppendText("a/nb/nc");
            //this.textBox1.AppendText("e/rf/rg");
            //this.textBox1.AppendText("e/r/nf/r/ng");
            //MessageBox.Show("a/nb/nc");
            //MessageBox.Show("e/r/nf/r/ng");

 

 

            Regex reg = new Regex(@"""[^@].+?[^//]""");

            StreamReader sr = new StreamReader(@"C:/Documents and Settings/menglh/My Documents/Visual Studio 2005/Projects/WindowsApplication2/ClassLibrary1/Class1.cs");
            string content = sr.ReadToEnd();
            content = content.Replace(System.Environment.NewLine, "/n");
            string[] lines = content.Split(new char[]{'/n'});
            string line = string.Empty;
            for(int i = 0 ; i < lines.Length ; i++)
            {
                line = lines[i];
                MatchCollection matchs = reg.Matches(line);
                foreach(Match match in matchs)
                {
                    if(!line.Contains(string.Format("GetResourceString({0})",match.Value)))
                    {
                        this.textBox1.AppendText(match.Value + System.Environment.NewLine);
                    }
                }

            }

 

 

            StreamReader sr = new StreamReader(@"C:/Documents and Settings/menglh/My Documents/Visual Studio 2005/Projects/WindowsApplication2/WindowsApplication2/Resource1.resx");
            string content = sr.ReadToEnd();
            sr.Close();
           
            string node = string.Format("  <data name=/"{0}/" xml:space=/"preserve/">/r/n",this.textBox1.Text);
            node += "    <value>AAA</value>/r/n";
            node += "    <comment>good</comment>/r/n";
            node += "  </data>/r/n";
            node += "</root>";
            content = content.Replace("</root>",node);
            StreamWriter sw = new StreamWriter(@"C:/Documents and Settings/menglh/My Documents/Visual Studio 2005/Projects/WindowsApplication2/WindowsApplication2/Resource1.resx");
            sw.Write(content);
            sw.Close();

关于 `resourceFilename` 上下文键的使用,以下是深度解析和实用指南: --- ### **1. 核心概念** `resourceFilename` 是 VS Code 的上下文键,表示 **带有扩展名的完整文件名**,特点如下: - **格式**:`文件名.扩展名`(如 `main.c`) - **来源**:自动从 `resourceUri` 或当前活动编辑器提取 - **大小写敏感**:取决于操作系统(Windows 不敏感,Linux/Mac 敏感) --- ### **2. 典型应用场景** #### (1) 基础文件名匹配 ```json // 精确匹配 main.c 文件 "when": "resourceFilename == 'main.c'" // 匹配所有 .c 文件 "when": "resourceFilename.endsWith('.c')" ``` #### (2) 正则表达式匹配 ```json // 匹配 main.c/main.cpp(忽略大小写) "when": "resourceFilename =~ /^(?i)main\\.(c|cpp)$/" // 匹配类似 config.* 的文件 "when": "resourceFilename =~ /^config\\..+/" ``` #### (3) 组合条件 ```json // 匹配 src/ 下的 C 语言头文件 "when": "resourceFilename.endsWith('.h') && resourceLangId == 'c' && resourcePath =~ /\\/src\\//" ``` --- ### **3. 调试技巧** #### 检查实际值: ```javascript // 方法1:通过 Inspect Context Keys 1. 按 Ctrl+Shift+P 2. 执行 "Developer: Inspect Context Keys" 3. 点击目标文件 // 方法2:代码打印 console.log(vscode.window.activeTextEditor?.document.fileName); ``` #### 常见问题排查: | 现象 | 可能原因 | 解决方案 | |------|----------|----------| | 条件不生效 | 拼写错误(如 `resoureFilename`) | 检查拼写 | | 无法匹配大小写 | 未使用正则 `(?i)` | 改用正则或统一大小写 | | 扩展名不识别 | 文件未保存/未关联语言 | 保存文件或配置语言模式 | --- ### **4. 高级用法** #### 动态菜单示例: ```json // 对测试文件显示额外菜单 { "command": "extension.runTest", "when": "resourceFilename =~ /_(test|spec)\\.[^.]+$/", "group": "navigation" } ``` #### 多条件组合: ```json // 仅在满足以下条件时显示: // - 是 .js 文件 // - 位于 /lib/ 目录 // - 当前 Git 分支为 dev "when": "resourceFilename.endsWith('.js') && resourcePath =~ /\\/lib\\// && git:branch == 'dev'" ``` --- ### **5. 与其他键的对比** | 上下文键 | 示例值 | 特点 | |----------|--------|------| | `resourceFilename` | `main.c` | 包含扩展名 | | `resourceExtname` | `.c` | 只有扩展名(带点) | | `resourceBasename` | `main` | 无扩展名 | | `resourcePath` | `/project/src/main.c` | 完整路径 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值