2011-06-02 1 views
0

J'essaye de faire un programme pour passer par beaucoup de fichiers .sql et remplacer les noms par exemple view_name à [dbo]. [View_name]. Jusqu'à présent, il remplace la plupart des mots, cependant si un nom contient un nombre entre parenthèses comme (3) ou (7) et ainsi de suite, il ne remplacera rien dans ce fichier. J'ai fourni le code ci-dessous.problème avec le remplacement d'expression régulière

 FolderBrowserDialog fb = new FolderBrowserDialog(); 
     fb.ShowDialog(); 

     string directory = fb.SelectedPath; 

     if(directory != String.Empty) 
     { 
      DirectoryInfo di = new DirectoryInfo(directory); 
      FileInfo fi = new FileInfo(directory); 
      FileInfo[] fiArray = di.GetFiles(); 

      for (int i = 0; i < fiArray.Length; i++) 
      { 
       string result; 
       //StreamReader 
       using (StreamReader sr = new StreamReader(directory + "\\" + fiArray[i].ToString())) 
       { 
        string temp = sr.ReadToEnd(); 

        string tempNameExtens = fiArray[i].Name; 
        string tempNameNoExtens = Path.GetFileNameWithoutExtension(fiArray[i].Name); 
        MessageBox.Show(tempNameNoExtens); 


        string pattern = "\\s" + tempNameNoExtens; 
        string replace = " [dbo].[" + tempNameNoExtens + "]"; 

        Regex rgx = new Regex(pattern); 
        result = rgx.Replace(temp, replace); 
       } 

       //StreamWriter 
       using (StreamWriter sw = new StreamWriter(directory + "\\" + fiArray[i].ToString())) 
       { 
        sw.WriteLine(result); 
       } 
      } 
     } 
+0

Voulez-vous dire que 'tempNameNoExtens' contient quelque chose comme' ABC (5) '? – Howard

+0

yea bien son obtenir les noms de fichiers si Template - Copy (2), et Template - Copy (5) quelque chose comme ça .. –

+0

Vous n'avez pas besoin d'expressions régulières pour une chaîne droite remplacer comme ceci. 'result = temp.Replace (" "+ tempNameNoExtens," [dbo]. ["+ tempNameNoExtens +"] ");' devrait être très bien. – Town

Répondre

1

Vous devez Escape les caractères lors de la construction d'un motif regex:

string pattern = "\\s" + Regex.Escape(tempNameNoExtens); 
Questions connexes