Продолжаем знакомство с программным комплексом ZennoPoster.
В примере показано:
- работа в многопоточном режиме
- чтение *.txt файлов
- сохранение содержимого *.txt файла в таблицу
- чтение и запись данных в таблицу
- конвертирование таблицы в список
- сохранение списка в *.txt файл
1. Получаем таблицу по имени созданную в проекте ZennoProject используя интерфейс IZennoTable
2. Инициализируем новый список класса List<T>
3. Сохраняем в переменную "путь нашего файла", с которым работаем
4. FileLocker - это созданный нами объект синхронизации в общем коде ZennoProject, расположенный в классе CommonCode.
4.1. Обязательно лочим наш поток(для того, чтобы другие
потоки не имели доступа к файлу),
4.2. Проверяем существование нашего файла, чистим таблицу
и инициализируем переменные.
4.3. Читаем файл используя класс StreamReader,который
позволяет работать с файлом как хранилищем символов, и
такой подход более эффективен.
4.4. Добавляем наши строки из файла в таблицу.
4.5. В цикле проверяем строки из таблицы и если выполняются необходимые условия, то сохраняем значения в переменные проекта.
4.6. Переносим строки из таблицы в список, для того, чтобы
сохранить их в файл(использую Linq запрос).
4.7. Сохраняем строки списка в файл используя класс
StreamWriter
Скриншот кода в проекте.
#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, #Сниппеты