简体   繁体   中英

Changing a Variable A-Z if file exists(C#)

Hey everyone I am currently getting the next variable based on if a file exists, but know there must be an easier way. This thread Iterating through the Alphabet - C# a-caz gave me some good insight, but I am having a bit of a problem Implementing it with what I have. Any suggestions would be really appreciated. Thanks

//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");
}

Look at this code:

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

That doesn't do what you think it does.

string.Replace doesn't change the contents of the existing string (it can't, strings are immutable). It returns a new string with the replacement made. So you may want:

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

It could be there are other problems - it's hard to know as the code is fairly convoluted - but that (and the other similar lines) are certainly problematic.

Okay, I am not clear on what exactly you are trying to accomplish. If you are trying to populate a couple of textboxes with a value based on the first file you find in a directory with a specific file name, then try the following:

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;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM