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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2015, 12:18   #11
Fil_1990
Пользователь
 
Регистрация: 23.09.2015
Сообщений: 76
По умолчанию

Т.е надо обратиться в цикле к каждому 4 элементу строк?

На этом примере проще,но с текстовым файлом не могу понять(

Последний раз редактировалось Serge_Bliznykov; 24.09.2015 в 16:16.
Fil_1990 вне форума Ответить с цитированием
Старый 24.09.2015, 13:01   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

простите, а что конкретно Вы не можете понять?

у Вас основной цикл будет выглядеть примерно так (без проверки на пустые строки):

Код:
foreach (string s in readText)
            {
                string[] elements = s.Split(','); 
                if (TimeSpan.TryParse(elements[4], out current_time)) {
			    	intervalsum += current_time;
			    	countRepair++;
		 }
            }
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.09.2015, 14:18   #13
Fil_1990
Пользователь
 
Регистрация: 23.09.2015
Сообщений: 76
По умолчанию

Не могу понять что делает TimeSpan,

Код:
TimeSpan intervalsum = new TimeSpan();
			TimeSpan current_time;????
			int countRepair = 0;??????
			
			foreach (var s in timeToRepair) {
				if (TimeSpan.TryParse(s, out current_time))????? {
				    	intervalsum += current_time;
				    	countRepair++;
				    }
код выдаёт ошибку
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"C:\Users\a.filatov\Desktop\1\COMMA.txt";
            string[] readText = File.ReadAllLines(path);
            TimeSpan intervaltimesum = new TimeSpan();
            TimeSpan current_time;
            int countTime = 0;
            foreach (string s in readText)
            {
                string[] elements = s.Split(',');


                    if (TimeSpan.TryParse(elements[4], out current_time))
                    {
                        intervaltimesum += current_time;
                        countTime++;
                    }
                }
                 
            }
            
           
            
            }
        }
Вот шапка файла
Цитата:
*** Jam Statistics ***
9/22/2015 12:02.54
Ver 3.12.6 Logic
ID: castle

Total Jams - 1000
MTBA - 11:37:53
MTTA - 1:13:57
Time jammed - 1232:42:18
Parts/jam (MUBA) 5151

LM Display:
All
Displaying by Time

LM = Logical Machine ID, Rc = Recoveries, Rt = Retries, Cl = Clears

#,LM,Jam ID,Date Occurred,Time Jammed,Rc,Rt,Cl,Jam Text
001,05,015,04/07/15 15:18,00:00:32,01,02,00,Picker can't detect all parts:Ck #1 A1
002,02,030,09/21/15 15:17,00:00:19,00,00,01,ATT unable to detect tray at Gripper
003,01,045,09/21/15 15:15,00:01:32,00,01,00,Aux tray is hanging on guides or stuck in gripper.
004,01,045,09/21/15 15:15,00:00:17,00,01,00,Aux tray is hanging on guides or stuck in gripper.
005,04,030,09/18/15 19:28,00:00:55,01,02,00,Missing sort device(s) on sort boat. B1
006,05,029,09/18/15 19:24,00:01:39,06,06,01,TS Picker missing parts:Ck #1 A1
Изображения
Тип файла: jpg Снимок.JPG (35.4 Кб, 38 просмотров)

Последний раз редактировалось Stilet; 24.09.2015 в 17:32.
Fil_1990 вне форума Ответить с цитированием
Старый 24.09.2015, 14:52   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Понятно. Просто нужно пропустить все строки с шапкой!
перебирайте в цикле строки, пока не встретите заголовок таблицы:
если строка содержит #,LM,Jam ID, то шапка найдена.
и потом перебирайте строки начиная со следующей строки.
Кстати, не удивлюсь, если после таблицы ещё какие-то левые строчки есть, которые не нужно обрабатывать!


p.s.
1) не пишите несколько сообщений подряд. для этого есть кнопка "Правка"
2) код ОБЯЗАТЕЛЬНО оформлять тегами. прочитайте тут - FAQ)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.09.2015, 15:15   #15
Fil_1990
Пользователь
 
Регистрация: 23.09.2015
Сообщений: 76
По умолчанию

Спасибо большое Сергей,я попробывал удалить шапку всё заработало,и пару строк снизу,но теперь проблема в формате вывода времени(
Fil_1990 вне форума Ответить с цитированием
Старый 24.09.2015, 15:43   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

пожалуйста!
Вы пошли по лёгкому пути.
надо было парсер допилить проверками на поиск нужной таблицы.
Но ладно, Вам виднее, как Вам лучше!

Цитата:
но теперь проблема в формате вывода времени(
так. возможно.
и в чём эта проблема заключается?
что Вы получаете в результате? А что хотите получить?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.09.2015, 15:54   #17
Fil_1990
Пользователь
 
Регистрация: 23.09.2015
Сообщений: 76
По умолчанию

Хочу получить формат в таком виде 00:00:42

А получаю в таком 19 305,75676 (

Искал в книге у шилдта, но не нашёл(

________________
НЕ ПИШИТЕ ПОДРЯД НЕСКОЛЬКО СООБЩЕНИЙ
ПОЛЬЗУЙТЕСЬ КНОПКОЙ "Правка" на своём крайнем сообщении и дописывайте всё, что хотите добавить.
Модератор

Последний раз редактировалось Serge_Bliznykov; 24.09.2015 в 16:16.
Fil_1990 вне форума Ответить с цитированием
Старый 24.09.2015, 16:16   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Хочу получить формат в таком виде 00:00:42
А получаю в таком 19 305,75676 (
код покажите.

Что-то такое в коде есть?
Код:
TimeSpan  intervalAverage = TimeSpan.FromSeconds( intervalsum.TotalSeconds/countRepair );
Console.WriteLine("Average time = {0}", intervalAverage);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.09.2015, 16:52   #19
Fil_1990
Пользователь
 
Регистрация: 23.09.2015
Сообщений: 76
По умолчанию

Код:
  if (TimeSpan.TryParse(elements[4], out current_time))
                    {
                        intervaltimesum += current_time;
                        countTime++;
                    }
                }
            Console.WriteLine("Среднее время = {0:N5}", intervaltimesum.TotalSeconds / countTime);
Fil_1990 вне форума Ответить с цитированием
Старый 25.09.2015, 11:22   #20
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

понятно.
вместо строчки
Цитата:
Код:
Console.WriteLine("Среднее время = {0:N5}", intervaltimesum.TotalSeconds / countTime);
напишите две строчки:
Код:
TimeSpan  intervalAverage = TimeSpan.FromSeconds( intervaltimesum.TotalSeconds / countTime );
Console.WriteLine("Среднее время = {0}", intervalAverage );
так устроит?

(если смущают дробные доли секунды, то нужно просто внутри FromSeconds() результат деления округлить до целого числа секунд.)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простой парсер, не могу получить href из html (DOM) strongmaster Общие вопросы Delphi 3 08.08.2015 21:10
Написать парсер elena380 Фриланс 3 26.11.2013 12:33
написать парсер Goodmaer Фриланс 1 19.05.2013 23:15
Нужно написать парсер tish88 Фриланс 35 02.09.2011 09:47
Требуется написать парсер-граббер сайтов bashkov Фриланс 4 28.07.2009 01:12