2015-05-21 7 views
0

Я пытаюсь импортировать файл .CSV в мою базу данных, которая представляет собой экспорт таблицы из системы управления изображениями. Эта система позволяет конечным пользователям принимать изображения и (иногда) разделять их на несколько изображений. В этом отчете есть столбец, который обозначает имя файла изображения, которое я отслеживаю. Если элементы разделены в системе управления изображениями, имя файла получает знак подчеркивания («_») в отчете. Предыдущее имя файла не сохраняется. Путь элементы может существовать на CSV, приведены ниже:Разрешительные имена имен файлов

Report 1 @ 8:00AM: ABC.PNG 

Report 2 @ 8:30AM: ABC_1.PNG 
        ABC_2.PNG 

Report 3 @ 9:00AM: ABC_1_1.PNG 
        ABC_1_2.PNG 
        ABC_2_1.PNG 
        ABC_2_2.PNG 

Report 4 @ 9:30AM ABC_1_1_1.PNG 
        ABC_1_1_2.PNG 
        ABC_1_2.PNG 
        ABC_2_1.PNG 
        ABC_2_2.PNG 

Я ввожу имя каждого файла в свой собственный рекорд. Когда элемент разделен, я хотел бы идентифицировать предыдущую версию и обновить исходную запись, а затем добавить новую запись split в мою базу данных. Ключом к пониманию разделения предмета является поиск символа подчеркивания («_»).

Я не уверен, что должен сделать, чтобы воссоздать предыдущие дочерние имена, я должен проверить каждую предыдущую итерацию имени файла, чтобы увидеть, существует ли она. Моя проблема заключается в интерпретации текущего состояния имени файла и восстановлении всех предыдущих возможностей. Мне не требуется исходное имя, только первое возможное имя разделения до текущего имени. В приведенном ниже коде показано, что я получаю, но я не уверен, как сделать это чисто.

String[] splitName = theStringToSplit.Split('_'); 

for (int i = 1; i < splitName.Length - 1; i++) 
{ 
    //should concat everything between 0 and i, not just 0 and I 
    //not sure if this is the best way or what I should do 

    MessageBox.Show(splitName[0] + "_" + splitName[i] + ".PNG"); 
} 

ответ

0

Вещь, которую вы ищете, является частью строки. Таким образом, string.Join() может помочь вам присоединить массив к разделительной строке: Он также содержит индекс запуска параметра и количество элементов для использования.

string[] s = new string[] { "2", "a", "b" }; 
string joined = string.Join("_", s, 0 ,3); 

// joined will be "2_a_b" 

Возможно, вы используете неправильный инструмент для решения проблемы. Если вы хотите сохранить последний «_», вы можете использовать LastIndexOf() или даже обычные выражения. В любом случае: вы не должны излишне копировать имена и повторно склеивать их. Если все будет сделано, сделать это cultrue инвариантна и не культура конкретными (может быть различными интерпретациями «-» или низкой буква «I» строки fnwithExt = «Abc_12_23.png»;.

 string fn = System.IO.Path.GetFileName(fnwithExt); 
     int indexOf = fn.LastIndexOf('_'); 
     string part1 = fn.Substring(0, indexOf-1); 
     string part2 = fn.Substring(indexOf+1); 
     string part3 = System.IO.Path.GetExtension(fnwithExt); 

     string original = System.IO.Path.ChangeExtension(part1 + "_"+ part2, part3); 
Смежные вопросы