rediffusion
11/4/2017 - 2:15 PM

Удалить строки

//Подменю "Списки-Операции над списком". Действие "Удалить строки"

//Создаём объект класса IZennoList, привязываемся к списку уровня проекта
IZennoList lstTest = project.Lists["Список 1"];
lstTest.Clear(); //очищаем список

//наполняем список тестовыми значениями
lstTest.Add("Это первый элемент");
lstTest.Add("Это второй элемент");
lstTest.Add("Это третий элемент");
lstTest.Add("Это четвёртый элемент");
lstTest.Add("Это пятый нелемент");
lstTest.Add("Это шестой нолемент");
lstTest.Add("Это седьмой нылемент");
lstTest.Add("Это восьмой нулемент");
lstTest.Add("Эта девятый лелемент");
lstTest.Add("Эта десятый лелелент");
lstTest.Add("Это элемент номер одиннадцать");

//IZennoList.RemoveAt: удаляем элемент с соответствующим индексом
//lstTest.RemoveAt(0);

//Удаляем элементы с указанными номерами (Номера через запятую, интервалы либо "Random", если необходимо удалить случайный элемент)
string strRemoveIndexes="0, 2-5, Random";
strRemoveIndexes = strRemoveIndexes.Replace(" ", String.Empty);
Random rndRowIndex = new Random();
List<int> lstRemoveIndexes = new List<int>();
foreach (string strRowIndex in strRemoveIndexes.Replace(" ", String.Empty).Split(',')) {
	if (Regex.IsMatch(strRowIndex, @"^\d+$")) {
		lstRemoveIndexes.Add(Convert.ToInt32(strRowIndex));
	}else if (strRowIndex.ToLower()=="random"){
		lstRemoveIndexes.Add(rndRowIndex.Next(0, lstTest.Count-1));
	}else if(strRowIndex.Contains("-")){
		int intStartIndex = Convert.ToInt32(new Regex(@"^\d(?=\D)").Match(strRowIndex).Value);
		int intEndIndex = Convert.ToInt32(new Regex(@"(?<=\D)\d$").Match(strRowIndex).Value);
		
		for (int k=intStartIndex; k<intEndIndex+1; k++) {
			lstRemoveIndexes.Add(k);
		}
	}
}
lstRemoveIndexes.Sort();
int intElementsRemoved=0;
foreach (int intRemoveIndex in lstRemoveIndexes) {
	lstTest.RemoveAt(intRemoveIndex-intElementsRemoved++);
}

lstTest.Add("этот элемент будет удалён по значению");
//IZennoList.Remove: удаляем элемент по его значению
lstTest.Remove("этот элемент будет удалён по значению");

//IZennoList.Clear: удаляем все элементы списка (раскомментируйте чтобы проверить)
//lstTest.Clear();

//Удаляем элементы, содержащие текст
string strContainsForRemove = "девятый";
int i=0;
while(true) {
	if (i==lstTest.Count||lstTest.Count==0) break;
	if (lstTest[i].Contains(strContainsForRemove)) {
		lstTest.RemoveAt(i);
	}else{
		i++;
	}
}

//Удаляем элементы, НЕ содержащие текст
string strNotContainsForRemove = "мент";
int n=0;
while(true) {
	if (n==lstTest.Count||lstTest.Count==0) break;
	if (!lstTest[n].Contains(strNotContainsForRemove)) {
		lstTest.RemoveAt(n);
	}else{
		n++;
	}
}

//Удаляем элементы, удовлетворяющие регулярному выражению
string strContainsRegex = @"н.лемент";
int m=0;
while(true) {
	if (m==lstTest.Count||lstTest.Count==0) break;
	if (new Regex(strContainsRegex).Matches(lstTest[m]).Count>0) {
		lstTest.RemoveAt(m);
	}else{
		m++;
	}
}

//Удаляем элементы, НЕ удовлетворяющие регулярному выражению
string strNotContainsRegex = @"номер";
int r=0;
while(true) {
	if (r==lstTest.Count||lstTest.Count==0) break;
	if (new Regex(strNotContainsRegex).Matches(lstTest[r]).Count==0) {
		lstTest.RemoveAt(r);
	}else{
		r++;
	}
}

//Добавляем пустой и пробельный элемент для следующего шага
lstTest.Add("");
lstTest.Add("   ");
//Удаляем пустые и содержащие только пробельные символы элементы
int p=0;
while(true) {
	if (p==lstTest.Count||lstTest.Count==0) break;
	if (String.IsNullOrWhiteSpace(lstTest[p])) {
		lstTest.RemoveAt(p);
	}else{
		p++;
	}
}

project.SendInfoToLog("Выполнено. Проверьте содержимое списка Список 1");

//Примечания: