Как пропустить первую строку
|
|
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
)) точно подметили ..исправил все отлично стало ! Благодарствую!
|
|
| |