Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2017, 19:51   #1
PupkinLeva
Новичок
Джуниор
 
Регистрация: 02.12.2014
Сообщений: 2
По умолчанию Проверка текстового файла C#

Здравствуйте! Есть текстовый файл в котором содержится слово Plane и координаты x,y,z в каждой строке отдельно(ну кроме комментариев x,y,z):

Plane
-0,07 //x
-0,005 //y
0,01 //z
-0,031 //x
-0,035 //y
0,01 //z и т.д.
0,045
-0,035
0,01
Plane
-0,064
-0,0026
0,05
-0,028
-0,026
0,05
0,034
-0,028
0,05

Необходимо провести проверку файла. Я сделал проверку файла на наличие лишних символов, кроме целых и вещественных чисел и слова Plane. Нужно сделать еще 2 проверки:
1. Если отсутствует какая-либо координата то вывести ошибку, какая(x,y или z) и в какой строке(число).
2. Если меньше 9 чисел то ошибка, не хватает координат

Вот мой код, в котором только проверяется на лишние символы:

Код:
int p1 = 1;
string[] linesProverka = File.ReadAllLines(openFileDialog1.FileName);
StreamReader sr = new StreamReader(openFileDialog1.FileName);
                        
   for (int g = 0; g < linesProverka.Length; g++)
     {
       bool isNum = double.TryParse(linesProverka[g], out num);
       if (Convert.ToString(linesProverka[g]) != "Plane" && !isNum)
           {
              DialogResult massage = MessageBox.Show("Ошибка чтения файла с координатами плоскостей и точек. № 
              Строки: " + p1 + ", содержание строки: " + "\"" + linesProverka[g] + "\"" + " В данной строке найдены лишние символы! 
              Должно быть целое число или с плавающей запятой, либо слово \"Plane\"", "Внимание!", MessageBoxButtons.YesNo,   
              MessageBoxIcon.Question);
              sr.Close();
              return;
            }
              p1++;
      }
sr.Close();

Последний раз редактировалось PupkinLeva; 26.05.2017 в 19:56.
PupkinLeva вне форума Ответить с цитированием
Старый 30.05.2017, 11:45   #2
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Цитата:
Сообщение от PupkinLeva Посмотреть сообщение
1. Если отсутствует какая-либо координата то вывести ошибку, какая(x,y или z) и в какой строке(число).
А как определить какой именно координаты не хватает? они не подписаны в файле, типа так: X=10 Y=4 Z=-3, потому при отсутствии какой-либо из них - как понять какой именно нет?
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
VVM вне форума Ответить с цитированием
Старый 02.06.2017, 22:00   #3
vaDS
Пользователь
 
Регистрация: 16.04.2017
Сообщений: 94
По умолчанию

Вчитался в ваш код, хотя и отдыхаю с пивом(извините, друзья)
Во-первых, чтение через "File.ReadAllLines" и "StreamReader sr=" - две разные вещи, а вы их обе применили сразу.
Код:
string[] readText = File.ReadAllLines(path);
Здесь вы получаете массив строк из файла и можете их обрабатывать как вам заблагорассудится. Одной строкой кода получаете. Файловый поток закрывать не нужно, как вы делаете(собственно дублируете уже сделанное) в следующем коде:
Код:
StreamReader sr = new StreamReader(...
//действия
sr.Close();
Во-вторых, если нужно работать с файловыми потоками, советую почитать об использовании дерективы using не в объявлении пространств имен, а в коде, типа
Код:
using(StreamReader sr = new StreamReader(...))
{
    //действия
}
Здесь теоретически при выходе из блока using при любом раскладе файловый поток корректно закроется(Не нужно будет помнить, что нужно вызвать sr.Close(); как у вас).

Собственно, это мои рекомендации по методам программирования, а в смысл того что есть у топикстартера не въехал. Уж очень тупо организована структура хранения данных.(Там как уже сказали перед мной непонятно как определить какая из координат отсутствует)

Последний раз редактировалось vaDS; 02.06.2017 в 23:27.
vaDS вне форума Ответить с цитированием
Старый 18.06.2017, 00:51   #4
catosaur
Новичок
Джуниор
 
Регистрация: 17.05.2017
Сообщений: 1
По умолчанию

Код:
public class Element {	
	string Name = "";
	double? X = null;
	double? Y = null;
	double? Z = null;
}


public List<Element> Read( String[] text ) {
	...
	return elements;
}


public List<String> Parse( List<Element> elements ) {
	List<String> errors = new List<String>();
	
	if( elements.Count < 3 ) {
		errors.Add( "too less elements: expected 3, was "+elements.Count );
		//return errors;
	}
	foreach( Element e in elements ) {
		if( e.X == null || e.Y == null || e.Z == null ) {
			errors.Add( "no coordinate: "+ e );
		}
	}

	return errors;
}
catosaur вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] Помогите с данной темой: Не создавая отдельного файла, удалить из текстового файла слова, содержащие N гласных букв Mapuo__ Помощь студентам 3 20.04.2017 18:42
Проверка сразу 2-х символов текстового массива Павел_95 Помощь студентам 1 02.01.2013 20:17
Проверка архивов rar, zip, arj, 7z на наличие файла используя cmd-файла cerberochek Win Api 5 05.10.2011 19:26
C# редактирование текстового файла dluhhbiu Помощь студентам 1 03.09.2011 17:45
Из текстового файла в бд!!! Poltev86 БД в Delphi 5 16.05.2010 23:18