Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.06.2013, 23:10
Sergio1985 Sergio1985 вне форума
Прохожий
 
Регистрация: 02.06.2013
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
Печаль Программа по обработке TXT файла

Доброго времени суток !
Я хотел узнать может кто сталкивался с подобной задачей.
У меня есть TXT файл с данными внутри тип данных следующий:

0.23 1342.43
0.43 1364.54
0.68 1385.45
1.47 1394.54
1.56 1423.65
2.45 1432.12
2.69 1421.87
3.41 1410.54
3.65 1416.54
и т.д.

Нужно чтобы программа *усредняла* данные т.е. я задавал определённый интервал , (к примеру через 1) и на выходе txt файл имел следующий вид

1 1345.10
2 1420.30
3 1426.37

Расчёт , берутся данные из 2 столбика от 0 до 1 и усредняются, от 1 до 2 , от 2 до 3 и так далее



Жду ваших мнений!
Спасибо.

Последний раз редактировалось Sergio1985, 02.06.2013 в 23:15.
Ответить с цитированием
  #2  
Старый 03.06.2013, 01:57
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

что-то принцип *усреднения* непонятен.
Цитата:
Расчёт , берутся данные из 2 столбика от 0 до 1 и усредняются, от 1 до 2 , от 2 до 3 и так далее
вот допустим в первой группе у тебя первый ряд
0.23 1342.43
как ты этим методом привел их к виду
1 1345.10 ?
Ответить с цитированием
  #3  
Старый 03.06.2013, 02:06
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Не понял какие данные надо усреднять.
Но делаешь так:
1. Заводишь свой тип, в котором надо хранить сам интервал, кол-во данных и сумму данных.
2. Читаешь файл и сохраняешь все в соотв. элементе массива.
3. После прочтения всех данных, проходишь по массиву и вычисляешь среднее значение (сумма / кол-во).
4. Profit.

Код писать лень, все очень просто.
Ответить с цитированием
  #4  
Старый 03.06.2013, 02:49
Sergio1985 Sergio1985 вне форума
Прохожий
 
Регистрация: 02.06.2013
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Допустим:
Вот такие данные ко мне поступают. Мне нужно чтобы, программа разбила данные через 0,5 единицы (это 1 столбик), второй столбик расчитывается, (для 8,5 возьму) берётся среднее число с 8,096 до 8,456 и записывается в 8,5 , ход действий такой для всех строк...
до после
8.096 1486.061 8 1486.05
8.049 1486.051 8.5 1486.06
8.164 1486.051 9 1486.07
8.164 1486.051 9.5 1486.09
8.456 1486.059 10 1486.09
8.755 1486.065 10.5 1486.09
8.755 1486.065 11 1486.1
8.857 1486.067 11.5 1486.11
8.918 1486.068 12 1486.11
9.026 1486.069
9.026 1486.069
9.19 1486.073
9.202 1486.072
9.202 1486.072
9.121 1486.071
9.06 1486.07
9.06 1486.07
9.201 1486.073
9.386 1486.074
9.44 1486.074
9.44 1486.074
9.324 1486.074
9.202 1486.074
9.202 1486.074
9.181 1486.075
9.262 1486.076
9.256 1486.076
9.256 1486.076
9.173 1486.075
9.167 1486.077
9.167 1486.077
9.356 1486.073
9.445 1486.076
9.445 1486.076
9.363 1486.075
9.159 1486.083
9.098 1486.084
9.098 1486.084
9.288 1486.083
9.472 1486.086
9.472 1486.086
9.465 1486.084
9.302 1486.086
9.233 1486.081
9.233 1486.081
9.403 1486.087
9.574 1486.092
9.574 1486.092
9.654 1486.095
9.573 1486.099
9.45 1486.085
9.45 1486.085
9.478 1486.089
9.687 1486.089
9.687 1486.089
9.926 1486.091
10.081 1486.088
10.081 1486.088
10.177 1486.087
10.183 1486.086
10.122 1486.085
10.122 1486.085
10.108 1486.086
10.252 1486.087
10.252 1486.087
10.551 1486.091
10.823 1486.098
10.856 1486.101
10.856 1486.101
10.767 1486.097
10.767 1486.095
10.767 1486.095
11.032 1486.099
11.358 1486.105
11.413 1486.105
11.413 1486.105
11.371 1486.1
11.433 1486.1
11.433 1486.1
11.78 1486.105
12.208 1486.113
12.208 1486.113
12.431 1486.118
12.424 1486.12
12.309 1486.119
12.309 1486.119
12.431 1486.119
12.689 1486.12
12.689 1486.12

Последний раз редактировалось Sergio1985, 03.06.2013 в 02:52.
Ответить с цитированием
  #5  
Старый 03.06.2013, 03:19
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
8.096 1486.061 8 1486.05
По правилам математики будет
8.096 1486.061 8.1 1486.1
а так смотри функции Ceil, Floor.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 03.06.2013, 05:49
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, берем то, что я написал (алгоритм).

Вот входной поток (часть):
8.096 1486.061
8.049 1486.051
8.164 1486.051
8.164 1486.051
8.456 1486.059
8.755 1486.065
8.755 1486.065
8.857 1486.067
8.918 1486.068

По алгоритму на первом шаге (чтение данных и раскладка по ячейкам) при твоем шаге 0.5 получится:
- в ячейке для 8.0-8.5: Count = 5, Sum = 7430.273
- в ячейке для 8.5-9.0: Count = 4, Sum = 5944.265

После деления (Sum/Count) получится:
8 1486,0546
8.5 1486,06625

Далее округляй по тем правилам, которые тебе нужны.
Пустые ячейки в начале пропускаются проверкой Count = 0.
Вычисдение номера ячейки по данным производится делением с округлением до целого (можно честно проверять, но так быстрее будет).
Ответить с цитированием
  #7  
Старый 03.06.2013, 05:53
Sergio1985 Sergio1985 вне форума
Прохожий
 
Регистрация: 02.06.2013
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Наверно я не совсем так изъяснился... идея такова чтобы, не округлять каждую строку математически, а из ряда значений получать одно, при котором задан интервал...
8.096 1486.061
8.049 1486.051
8.164 1486.051
8.164 1486.051
8.456 1486.059


получилось число 8, с округлённым значением 1486.05, это (1486,05) получилось как среднее всех значений интервалов с 8,096 до 8,456, за ним пойдёт 8,5 > 9 > 9.5 > 10 ....
Ответить с цитированием
  #8  
Старый 03.06.2013, 08:02
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Sergio1985
Наверно я не совсем так изъяснился... идея такова чтобы, не округлять каждую строку математически, а из ряда значений получать одно, при котором задан интервал...
8.096 1486.061
8.049 1486.051
8.164 1486.051
8.164 1486.051
8.456 1486.059


получилось число 8, с округлённым значением 1486.05, это (1486,05) получилось как среднее всех значений интервалов с 8,096 до 8,456, за ним пойдёт 8,5 > 9 > 9.5 > 10 ....

Ну, хозяин-барин. Не вижу в чем проблема посчитать, все равно тебе надо как-то это одно значение выбирать. Одно из интервала, а если так тыкнув попадешь на локальный пик? Получишь "мусор" в результате. Все-равно читать весь файл, так что можно и посчитать.

Походу, не вижу смысла в дальнейшем моем участии в данной теме. ТС хочет чего-то странного. После предложенного алгоритма точного решения задачи, продолжает упорствовать в заблуждениях.
За сим, прощаюсь...
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Sergio1985 (03.06.2013)
  #9  
Старый 03.06.2013, 08:16
Sergio1985 Sergio1985 вне форума
Прохожий
 
Регистрация: 02.06.2013
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Ну, хозяин-барин. Не вижу в чем проблема посчитать, все равно тебе надо как-то это одно значение выбирать. Одно из интервала, а если так тыкнув попадешь на локальный пик? Получишь "мусор" в результате. Все-равно читать весь файл, так что можно и посчитать.

Походу, не вижу смысла в дальнейшем моем участии в данной теме. ТС хочет чего-то странного. После предложенного алгоритма точного решения задачи, продолжает упорствовать в заблуждениях.
За сим, прощаюсь...
Если ты по поводу поста , то он не тебе был адресован, а angvelem ...)
Ответить с цитированием
  #10  
Старый 03.06.2013, 08:18
Sergio1985 Sergio1985 вне форума
Прохожий
 
Регистрация: 02.06.2013
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Ну, хозяин-барин. Не вижу в чем проблема посчитать, все равно тебе надо как-то это одно значение выбирать. Одно из интервала, а если так тыкнув попадешь на локальный пик? Получишь "мусор" в результате. Все-равно читать весь файл, так что можно и посчитать.

Походу, не вижу смысла в дальнейшем моем участии в данной теме. ТС хочет чего-то странного. После предложенного алгоритма точного решения задачи, продолжает упорствовать в заблуждениях.
За сим, прощаюсь...
а твой алгоритм хороший, я думаю как его реализовать сейчас, просто я не очень силён пока в Delphi....
Ответить с цитированием
  #11  
Старый 03.06.2013, 09:13
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Sergio1985
а твой алгоритм хороший, я думаю как его реализовать сейчас, просто я не очень силён пока в Delphi....

Динамический массив записей. Запись - тебе хватит 2х полей - Count и Sum.
Индекс в массиве вычисляется как Round(V/d), где V - значение, d - твой шаг. Если индекс получился > High(A), то переразмериваешь массив через SetLength. Все.

ЗЫ, читать такие данные можно просто вызовом Read(v, x), будет читать 2 значения в переменные.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Sergio1985 (03.06.2013)
  #12  
Старый 03.06.2013, 19:35
Sergio1985 Sergio1985 вне форума
Прохожий
 
Регистрация: 02.06.2013
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Динамический массив записей. Запись - тебе хватит 2х полей - Count и Sum.
Индекс в массиве вычисляется как Round(V/d), где V - значение, d - твой шаг. Если индекс получился > High(A), то переразмериваешь массив через SetLength. Все.

ЗЫ, читать такие данные можно просто вызовом Read(v, x), будет читать 2 значения в переменные.

Спасибо! Буду кумекать )))
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter