0

応答には2つのタイプがあることがわかります。

  1. ウィンドウズ
  2. Unix

"08-25-12  06:52AM            139874418 3.03.06P13.12NB.rar"  
"-r-xr-xr-x   1 owner    group               1 Jun  3  1999 NotCurrentYear.txt"  

私はそれを解析する必要があり、次のロジックを使用しました:

AnalyzedFolder folderToBeAnalyzed = new AnalyzedFolder();
                folderToBeAnalyzed.Name = folder;
                Job.AnalyzedFolders.Add(folderToBeAnalyzed);


                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(textBoxFTPSite.Text + folder);
                request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                request.Credentials = new NetworkCredential(textBoxFTPUserName.Text, textBoxFTPPassword.Text);

                FtpWebResponse response = (FtpWebResponse)request.GetResponse();


                Stream responseStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(responseStream);


                string[] outputlines = reader.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
                foreach (string info in outputlines)
                {
                    var tokens = info.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                    string name;
                    string type;
                    string size;
                    DateTime dateModified;
                    string lsLine;

                    if (tokens.Length == 4) //WINDOWS
                    {
                        name = tokens[3];
                        if (tokens[2] == "<DIR>")
                        {
                            type = "D";
                            size = "";
                        }
                        else
                        {
                            type = "F";
                            size = tokens[2];
                        }
                        dateModified = DateTime.ParseExact(tokens[0] + " " + tokens[1], "MM-dd-yy h:mmtt", CultureInfo.InvariantCulture);
                        lsLine = info;
                        FTPFolderEntity entity = new FTPFolderEntity() { FolderName = folder, Name = name, Type = type, Size = size, DateModified = dateModified, LSLine = lsLine };
                        folderToBeAnalyzed.Entities.Add(entity);
                    }
                    else //UNIX
                    {
                    }
                }

問題は、このファイルの場合です。

"11-15-12  10:02PM                  324 Copy (10) of 1040.txt.zip"

スペースがあるため、ロジックは失敗します。また、このバグのように、他の問題にも遭遇する可能性があると思います。誰かが私にもっと良い構文解析方法を教えてもらえますか?

4

2 に答える 2

0

ここで正規表現を使用して、余分なWhitesapcesを削除できます。

string info = "11-15-12  10:02PM                  324 Copy (10) of 1040.txt.zip";
string result = Regex.Replace(info, @"\s\s+", " ");

その後、あなたはとして取得resultします

// result = "11-15-12 10:02PM 324 Copy (10) of 1040.txt.zip";

追加、最初が常に日付、2番目が時刻、残りがfileNameか何かであると仮定して、トークンを制限したい場合:

var tokens = Regex.Split(info, @"\s+");

var newTokens = new string[] 
{ 
    tokens[0], 
    tokens[1], 
    tokens[2],
    tokens[3] + ' ' + tokens[4] + ' ' + tokens[5] + ' ' + tokens[6]
};
于 2012-11-16T05:05:09.500 に答える
0

正規表現を使用して分割を行うことができます。

var tokens = Regex.Split(info, @"\s+");
于 2012-11-16T05:13:33.183 に答える