|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Программа по обработке 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
|
|||
|
|||
что-то принцип *усреднения* непонятен.
Цитата:
0.23 1342.43 как ты этим методом привел их к виду 1 1345.10 ? |
#3
|
|||
|
|||
Не понял какие данные надо усреднять.
Но делаешь так: 1. Заводишь свой тип, в котором надо хранить сам интервал, кол-во данных и сумму данных. 2. Читаешь файл и сохраняешь все в соотв. элементе массива. 3. После прочтения всех данных, проходишь по массиву и вычисляешь среднее значение (сумма / кол-во). 4. Profit. Код писать лень, все очень просто. |
#4
|
|||
|
|||
Допустим:
Вот такие данные ко мне поступают. Мне нужно чтобы, программа разбила данные через 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
|
||||
|
||||
Цитата:
8.096 1486.061 8.1 1486.1 а так смотри функции Ceil, Floor. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#6
|
|||
|
|||
Ну, берем то, что я написал (алгоритм).
Вот входной поток (часть): 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
|
|||
|
|||
Наверно я не совсем так изъяснился... идея такова чтобы, не округлять каждую строку математически, а из ряда значений получать одно, при котором задан интервал...
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
|
|||
|
|||
Цитата:
Ну, хозяин-барин. Не вижу в чем проблема посчитать, все равно тебе надо как-то это одно значение выбирать. Одно из интервала, а если так тыкнув попадешь на локальный пик? Получишь "мусор" в результате. Все-равно читать весь файл, так что можно и посчитать. Походу, не вижу смысла в дальнейшем моем участии в данной теме. ТС хочет чего-то странного. После предложенного алгоритма точного решения задачи, продолжает упорствовать в заблуждениях. За сим, прощаюсь... |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Sergio1985 (03.06.2013)
|
#9
|
|||
|
|||
Цитата:
|
#10
|
|||
|
|||
Цитата:
|
#11
|
|||
|
|||
Цитата:
Динамический массив записей. Запись - тебе хватит 2х полей - Count и Sum. Индекс в массиве вычисляется как Round(V/d), где V - значение, d - твой шаг. Если индекс получился > High(A), то переразмериваешь массив через SetLength. Все. ЗЫ, читать такие данные можно просто вызовом Read(v, x), будет читать 2 значения в переменные. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Sergio1985 (03.06.2013)
|
#12
|
|||
|
|||
Цитата:
Спасибо! Буду кумекать ))) |