2011-10-25 12 views
1

皆さんは、現在、ファイルが存在する場合に次の変数を取得していますが、もっと簡単な方法があるはずです。このスレッドIterating through the Alphabet - C# a-cazは私に良い洞察力を与えましたが、問題が少しあります。私が持っているものを実装してください。どんな提案も本当に感謝しています。このコードでは感謝ファイルが存在する場合、変数A-Zを変更する(C#)

//Generate Motor Spacer Part Number 
textBox3.Text = "MLB028A-MTRSPR-" + "z" + "-" + "y"; 
if (comboBox3.Text == "28mm (NEMA 11)") textBox3.Text = textBox3.Text.Replace("z", "B"); 
if (comboBox3.Text == "28mm (NEMA 11)") textBox3.Text = textBox3.Text.Replace("y", "A"); 

//Generate Motor Spacer Part Descriptions 
textBox5.Text = "SPACER, " + comboBox3.Text + ", CFG-" + "y" + " MLB028"; 
if (comboBox3.Text == "28mm (NEMA 11)") textBox5.Text = textBox5.Text.Replace("y", "A"); 

string B = @"C:\Engineering\Engineering\SW Automation\Linear Actuator Technology\MLC Series\Models\MLB028Z-MTRSPR-B-A.SLDPRT"; 
if (File.Exists(B)) 
{ 
    testBox3.Text = textBox3.Text.Replace("y", "B"); 
    textBox5.Text = textBox5.Text.Replace("y", "B"); 
} 

string C = @"C:\Engineering\Engineering\SW Automation\Linear Actuator Technology\MLC Series\Models\MLB028Z-MTRSPR-B-B.SLDPRT"; 
if (File.Exists(C)) 
{ 
    testBox3.Text = textBox3.Text.Replace("y", "C"); 
    textBox5.Text = textBox5.Text.Replace("y", "C"); 
} 

答えて

1

さて、あなたが達成しようとしていることを正確にはわかりません。あなたが特定のファイル名を持つディレクトリにある最初のファイルに基づいて値を持つテキストボックスのカップルを投入しようとしている場合は、次のことを試してみてください。実際にそれを指摘して

void PopulateTextBoxes() 
{ 
    string format = "MLB028A-MTRSPR-B-{1}"; 
    string format2 = "SPACER, {0}, CFG-{1} MLB028"; 
    string fileName = @"C:\Engineering\Engineering\SW Automation\Linear Actuator Technology\MLC Series\Models\MLB028Z-MTRSPR-B-{1}.SLDPRT"; 

    for(string start = "A"; start != "Z"; start = GetNextBase26(start)) 
    { 
     if(File.Exists(String.Format(fileName,start))) 
     { 
      textBox3.Text = String.Format(format,start); 
      textBox5.Text = String.Format(format2,textBox3.Text,start); 
      break; 
     } 
    } 

} 

// CODE FROM http://stackoverflow.com/questions/1011732/iterating-through-the-alphabet-c-sharp-a-caz 
private static string GetNextBase26(string a) 
{ 
    return Base26Sequence().SkipWhile(x => x != a).Skip(1).First(); 
} 

private static IEnumerable<string> Base26Sequence() 
{ 
    long i = 0L; 
    while (true) 
     yield return Base26Encode(i++); 
} 

private static char[] base26Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray(); 
private static string Base26Encode(Int64 value) 
{ 
    string returnValue = null; 
    do 
    { 
     returnValue = base26Chars[value % 26] + returnValue; 
     value /= 26; 
    } while (value-- != 0); 
    return returnValue; 
} 
2

ルック:

textBox3.Text.Replace("y", "B"); 

あなたはそれがないと思う何をしません。

string.Replaceは、既存の文字列の内容を変更しません(文字列は変更できません)。置換えをした新しい文字列を返します。だから、したいことがあります。

textBox3.Text = textBox3.Text.Replace("y", "B"); 

それが他の問題があるかもしれない - それはコードがかなり複雑であると知るのは難しい - しかし、それ(および他の類似の線)は確かに問題があります。

+0

感謝を! –

関連する問題