Четверг, 19 Декабря 2024, 12:36

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Как пропустить первую строку
SSS22Дата: Четверг, 09 Января 2020, 14:19 | Сообщение # 1
был не раз
Сейчас нет на сайте
Добрый день форумчане! Недавно начал изучать C# требуется по ходу работы.
Задача следующая:
Считать данные из CSV файла (строки). Данные записать в архивную базу данных с меткой времени. Код который написал - рабочий. В архиве все данные вижу корректно, но есть проблемы корректировки:
Первая строка файла содержит некорректные данные - не числовые, типа заголовок файла. В коде нужно как-то пропускать первую строку в цикле((( в этом собственно проблема. Думаю использовать "continue" если строка == первой, но надо какимто образом считывать номер строки...((?или както подругому.

Вот данные CSV файла
1 строка: DATATIME;Parametr1;Parametr2;Parametr3 //вот эту строку пропускать нужно в цикле
2 строка: 08.01.2020 6:15:00;-1;103561;-1,7
3 строка: 08.01.2020 6:30:00;-1;58664;-1,1
4 строка: 08.01.2020 6:45:00;-4;25622;-1,9
....
96 строка: 08.01.2020 19:45:00;-9;2562;-0,9

Вот сам код С#

using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;
using System.IO;

public partial class ФБ : ScriptBase
{
bool? M=false;
public override void Execute()
{
if (Считать==true && M==false && Файл!=string.Empty && Файл!=null)
{
Ошибка=false;
try
{
using(var file = new StreamReader(Файл)) //открытие файла для чтения
{
var line=file.ReadLine();

while (line!=null)
{

String[] substrings = line.Split(';'); //разбор строки на составляющие
var Time = DateTime.Parse(substrings[0]); // преобразую время
for (int i=1;i<=3;i++) // считаю столбцы
{
SetValue("Параметр"+i.ToString(), new PinValue(Double.Parse(substrings[i]),Time)); // запись параметров
}

line=file.ReadLine();//считывание строк из файла
}

}
}

catch (Exception ex)
{
Ошибка=true;
ReportError (ex.Message); //вызов метода для записи сообщения в лог
}
}
M=Считать;
}

void ReportError (string Error) //данный метод записывает сообщения в лог
{
var ScriptName=HostFB.TreeItemHlp.ToString(); //имя скрипта
HostFB.TreeItemHlp.Project.ErrorTracer.ReportError(string.Format("{0}: {1}",ScriptName,Error));
}

}

подчеркнутым выделил где сам код считывания происходит.
HELP PLEASE!) как пропустить первую строку данных файла
OrdanДата: Пятница, 10 Января 2020, 01:11 | Сообщение # 2
Главный зомби
Сейчас нет на сайте
почему бы просто не начать читать сразу со второй? ну или можешь тупо объявить параметр а=0 а каждый цикл делать а++ и если у тебя а==0 то пропускай заход

Цитата недели: Из-за леса, из-за гор, кишки, месиво, хардкор. (Берсерк ТВ-2)

Мои проекты ТЫК
Мои видяхи на ютубэ ТЫК

Если ты споришь с идиотом, вероятно тоже самое делает и он.
SSS22Дата: Пятница, 10 Января 2020, 12:39 | Сообщение # 3
был не раз
Сейчас нет на сайте
Цитата Ordan ()
почему бы просто не начать читать сразу со второй? ну или можешь тупо объявить параметр а=0 а каждый цикл делать а++ и если у тебя а==0 то пропускай заход


логично конечно. так тоже думаю делать.
но не силен в С# коде.

поэтому и прошу помочь в написании
OrdanДата: Пятница, 10 Января 2020, 14:15 | Сообщение # 4
Главный зомби
Сейчас нет на сайте
int a=0;
while (line!=null)
{
if (a==0) continue;
a++;
}


Цитата недели: Из-за леса, из-за гор, кишки, месиво, хардкор. (Берсерк ТВ-2)

Мои проекты ТЫК
Мои видяхи на ютубэ ТЫК

Если ты споришь с идиотом, вероятно тоже самое делает и он.
drcrackДата: Пятница, 10 Января 2020, 14:26 | Сообщение # 5
старожил
Сейчас нет на сайте
можно короче — просто добавить file.ReadLine():

Код
using(var file = new StreamReader(Файл)) {

  file.ReadLine();/// ←←← пропуск строки

  var line = file.ReadLine();

  while (line!=null) {


Сообщение отредактировал drcrack - Пятница, 10 Января 2020, 14:29
SSS22Дата: Пятница, 10 Января 2020, 23:06 | Сообщение # 6
был не раз
Сейчас нет на сайте
Цитата drcrack ()
можно короче — просто добавить file.ReadLine():


работает!!! Спасибо!
немного модифицировал еще код....нужно чтобы параметр1 обрабатывать...делить на 100000...сделал условие..но както неправильно...записываются в архив не каждая строка, а через две((( т.е. данные за 6:15 а потом сразу 7:00.
а должно быть 6:15...6:30..6:45...7:00....и т.д.
вот модифицированный код:

{
using(var file = new StreamReader(Файл)) //открытие файла для чтения
{
file.ReadLine(); //скрыть первую строку
var line=file.ReadLine();

while (line!=null)
{

String[] substrings = line.Split(';'); //разбор строки на составляющие
var Time = DateTime.Parse(substrings[0]);
var Time1 = Time.ToUniversalTime();
for (int i=1;i<=3;i++)
{
if (i==1)
{
SetValue("Параметр"+i.ToString(), new PinValue(Double.Parse(substrings[i])/100000,Time1)); // делим
}
if (i==2)
{
SetValue("Параметр"+i.ToString(), new PinValue(Double.Parse(substrings[i]),Time1));
}
if (i==3)
{
SetValue("Параметр"+i.ToString(), new PinValue(Double.Parse(substrings[i]),Time1));
}

line=file.ReadLine();//считывание строк из файла
}
}
}
}
.......

подскажите пожалуйста что неправильно наделал то? Нужно чтобы первый столбец (parametr1) делился на 100000, а другие 2 и 3 записывались как есть без матем. обработки.
drcrackДата: Суббота, 11 Января 2020, 04:50 | Сообщение # 7
старожил
Сейчас нет на сайте
так у тебя line=file.ReadLine(); внутри for 1-3

Код
for (int i=1;i<=3;i++)
{
/// всякое разное
line=file.ReadLine();// внутри цикла!
}
// ← а должно быть тут
}


Сообщение отредактировал drcrack - Суббота, 11 Января 2020, 05:36
SSS22Дата: Суббота, 11 Января 2020, 09:14 | Сообщение # 8
был не раз
Сейчас нет на сайте
Цитата drcrack ()
так у тебя line=file.ReadLine(); внутри for 1-3


)) точно подметили ..исправил все отлично стало deal ! Благодарствую!
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг