iT邦幫忙

0

【求救】如何查詢到檔名關鍵字後,切割檔案名稱後將切割檔案名稱值帶入。

  • 分享至 

  • xImage

各位大神們,不好意思,小弟又來求助了。

有關以下程式碼:

DirectoryInfo di = new DirectoryInfo(@"C:\Users\gunji\Desktop\data\");

foreach (var fi in di.GetFiles("*.xml"))
{
                
     Regex regex = new Regex(@"SMRY911");
     Match m = regex.Match(fi.ToString());
     Console.WriteLine(m.Success);

 if (m.Success == true)
 {
    Console.WriteLine("Send To Server : OK");
    string strResult = fi.Name;
    string[] strArray = strResult.Split('_', '.');
    
    formData.Append(new FieldItem("USER", strArray[0]));
    formData.Append(new FieldItem("SHOP", strArray[1]));
    formData.Append(new FieldItem("TERM", strArray[2]));
    formData.Append(new FieldItem("FILETYPE", strArray[3]));
    formData.Append(new FieldItem("SALES_DATE", strArray[4]));
    formData.Append(new FieldItem("CLOSE_COUNTER", strArray[5]));
    formData.Append(new FieldItem("BATCHID", strArray[6]));

    formData.Append(new FileItem("FILE",Path.GetFileName(fi.ToString()), di + fi.ToString()));

               
 }
 else if (m.Success == false)
 {
     Console.WriteLine("Send To Server : NO FILE");
     break;
                 
 }

想實現內容:

 找尋目標資料夾檔案中的檔名關鍵字後,帶出完整檔名並開始切割檔名丟至下方表單內。

例:

 在C:\Users\gunji\Desktop\data\ 下有四個檔案

第一回:

1319_00_SMRY901_20180313.XML
1319_00_SMRY911_20180313.XML
1319_00_SMRY921_20180313.XML
1319_00_SMRY931_20180313.XML

關鍵字內容:SMRY901

找出檔案顯示完整路徑名稱(含附檔名),並將檔名(1319_00_SMRY901_20180313(不含附檔名))切割。

丟至formData.Append(new FieldItem("USER", strArray[0]));裡面。

若有找到檔案回應"Have File",若無"NO File" 。

顯示成果為

formData.Append(new FieldItem("USER",1319 ));
 formData.Append(new FieldItem("SHOP", 00));
 formData.Append(new FieldItem("TERM", SMRY901));
 formData.Append(new FieldItem("FILETYPE", 20180313));

依此類推。

 請問各路大神可以指點一下方向嗎,這裡小弟試過很多方法,雖然上面程式可行,但foreach好像是跟FOR迴圈是一樣的東西所以IF判斷式好像很有問題。

 有想過直接完成後加break;跳出,但總覺得小弟寫的檔案分割,帶入值的程式不是很理想。是否有方式可以更加便捷的方式呢?

看更多先前的討論...收起先前的討論...
雷夢卡爾 iT邦研究生 5 級 ‧ 2018-12-26 09:57:16 檢舉
https://stackoverflow.com/questions/3554559/regex-to-find-a-file-in-folder

IEnumerable<string> files = Directory
.EnumerateFiles(@"c:\somePath")
.Where(name => Regex.IsMatch(name, "SOME REGEX"));

先找出符合的檔案再處理如何
narumi iT邦新手 5 級 ‧ 2018-12-26 10:35:19 檢舉
好像可行,其實小弟也在研究這寫法,感覺得像SQL的語法啊。
narumi iT邦新手 5 級 ‧ 2018-12-26 10:39:45 檢舉
只是我該如何去驗證他拉出來的東西是我要的?
Console.WriteLine(裡面要顯示什麼?)
narumi iT邦新手 5 級 ‧ 2018-12-26 17:01:18 檢舉
用了一個很笨的方法達成了
IEnumerable<string> files = Directory.GetFiles(@"C:\Users\gunji\Desktop\data\","*.xml")//, SearchOption.AllDirectories .Where(s => s.Contains("SMRY911"));

foreach (var check in files)
{


string[] strArray = Path.GetFileName(check).Split('_', '.');
}
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
JamesDoge
iT邦高手 1 級 ‧ 2023-02-10 07:58:27
using System;
using System.IO;

namespace FileSearchAndParse
{
    class Program
    {
        static void Main(string[] args)
        {
            // 定義資料夾路徑
            string path = @"C:\Users\gunji\Desktop\data\";
            // 定義關鍵字
            string searchKeyword = "SMRY901";
            // 定義檔案名稱變數,並初始化為空字串
            string fileName = string.Empty;
            // 定義字串陣列,大小為4
            string[] strArray = new string[4];

            // 遍歷資料夾中的所有檔案
            foreach (string file in Directory.GetFiles(path))
            {
                // 取得檔案名稱(不含附檔名)
                fileName = Path.GetFileNameWithoutExtension(file);
                // 判斷檔案名稱是否包含關鍵字
                if (fileName.Contains(searchKeyword))
                {
                    // 輸出找到的檔案的完整路徑
                    Console.WriteLine("有檔案:" + file);
                    // 將檔案名稱以 "_" 符號分割成字串陣列
                    strArray = fileName.Split('_');
                    // 輸出表單內容,將分割後的字串陣列元素帶入表單內容中
                    Console.WriteLine("formData.Append(new FieldItem(\"USER\", " + strArray[0] + "));");
                    Console.WriteLine("formData.Append(new FieldItem(\"SHOP\", " + strArray[1] + "));");
                    Console.WriteLine("formData.Append(new FieldItem(\"TERM\", " + strArray[2].Replace(searchKeyword, "") + "));");
                    Console.WriteLine("formData.Append(new FieldItem(\"FILETYPE\", " + strArray[3] + "));");
                    // 離開迴圈
                    break;
                }
            }

            // 若沒有找到檔案,則輸出 "NO File"
            if (string.IsNullOrEmpty(fileName))
            {
                Console.WriteLine("NO File");
            }

            // 等待使用者按下任意鍵
            Console.ReadKey();
        }
    }
}

我要發表回答

立即登入回答