Ежедневник IT-ка
133 subscribers
22 photos
4 videos
1 file
43 links
Программируем на практике!!
По вопросам по поводу проектов: @vladimir_dzen
Download Telegram
​​Продолжаем знакомство с программным комплексом ZennoPoster.

В примере показано:
- работа в многопоточном режиме
- чтение *.txt файлов
- сохранение содержимого *.txt файла в таблицу
- чтение и запись данных в таблицу
- конвертирование таблицы в список
- сохранение списка в *.txt файл

1. Получаем таблицу по имени созданную в проекте ZennoProject используя интерфейс IZennoTable

var sourceTable = project.Tables["Accounts"];

2. Инициализируем новый список класса List<T>

var sourceListFromTask = new List<string>();

3. Сохраняем в переменную "путь нашего файла", с которым работаем

string pathFile = Path.Combine(project.Directory, "account.txt");

4. FileLocker - это созданный нами объект синхронизации в общем коде ZennoProject, расположенный в классе CommonCode.

public static object FileLocker = new object();

4.1. Обязательно лочим наш поток(для того, чтобы другие
потоки не имели доступа к файлу),

lock (CommonCode.FileLocker)
{
4.2. Проверяем существование нашего файла, чистим таблицу
и инициализируем переменные.

if (File.Exists(pathFile))
{
sourceTable.Clear();
String line;
bool insertLine = true;

4.3. Читаем файл используя класс StreamReader,который
позволяет работать с файлом как хранилищем символов, и
такой подход более эффективен.

using (StreamReader sr = new StreamReader(@pathFile, Encoding.UTF8))
while ((line = sr.ReadLine()) != null)

4.4. Добавляем наши строки из файла в таблицу.

sourceTable.AddRow(line);

4.5. В цикле проверяем строки из таблицы и если выполняются необходимые условия, то сохраняем значения в переменные проекта.

for (int indexOfRow = 0; indexOfRow < sourceTable.RowCount; indexOfRow++)
{
string value = sourceTable.GetCell("C", indexOfRow).Trim();
if (string.IsNullOrEmpty(value) && insertLine)
{
project.Variables["emailAcc"].Value = sourceTable.GetCell("A", indexOfRow).Trim();
project.Variables["passAcc"].Value = sourceTable.GetCell("B", indexOfRow).Trim();
sourceTable.SetCell("C", indexOfRow, "Checking");
insertLine = false;
}
}

4.6. Переносим строки из таблицы в список, для того, чтобы
сохранить их в файл(использую  Linq запрос).

int column = 0;
Enumerable.Range(0, sourceTable.RowCount).ToList().ForEach(i => sourceListFromTask.Add(String.Join(":", sourceTable.GetRow(i))));

4.7. Сохраняем строки списка в файл используя класс
StreamWriter

using (StreamWriter sw = new StreamWriter(pathFile, false, Encoding.UTF8))
{
sw.WriteLine(string.Join("\r\n", sourceListFromTask));
}
}
}

Скриншот кода в проекте.

#ZennoPoster, #Сниппеты