Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обработка данных в Borland C++ Builder, обработка текстового файла 
V
    Опции темы
AFenix85
Дата 20.4.2007, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 20.4.2007
Где: Россия,Иркутск

Репутация: нет
Всего: нет



Мне надо из file.dat считать данные в программе.Помогите кто может.
Файл представляет из себя таблицу,без линий(надеюсь понятно),нужно считать определенный столбец! smile Помогите как smile  
PM MAIL   Вверх
Rodman
Дата 20.4.2007, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



работать с файлом можно при помощи TStringList...

но что ты имеешь ввиду под "столбцом"...

Покажи структура файла...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Anikmar
Дата 20.4.2007, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(AFenix85 @  20.4.2007,  11:05 Найти цитируемый пост)
Файл представляет из себя таблицу,без линий(надеюсь понятно),

Для меня было бы больше непонятно "Файл представляет собой таблицу с линиями"

Присоединяюсь к Rodman : структуру файла в студию!
PM MAIL ICQ   Вверх
AFenix85
Дата 20.4.2007, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 20.4.2007
Где: Россия,Иркутск

Репутация: нет
Всего: нет



Это кусок!

 tm55    tm60    tm65    tm70    tm75    tm80    tm85    tm90    vx55
4.211    4.211    4.218    4.211    4.211    4.211    4.224    4.211    -58.5
4.224    4.229    4.224    4.218    4.218    4.218    4.229    4.218    -57
4.229    4.236    4.229    4.224    4.224    4.224    4.242    4.224    -56.6
4.236    4.242    4.236    4.229    4.229    4.229    4.311    4.229    -56.4
4.242    4.248    4.242    4.236    4.236    4.236    4.324    4.236    -56.4
4.248    4.254    4.248    4.242    4.242    4.242    4.636    4.242    -56.6
4.254    4.561    4.561    4.248    4.248    4.248    4.661    4.248    -56.9
4.592    4.568    4.579    4.254    4.254    4.254    4.961    4.254    -57.3
4.611    4.574    4.611    4.311    4.311    4.311    5.161    4.311    -57.8
4.617    4.579    4.617    4.318    4.318    4.318    5.174    4.318    -58.4
4.624    4.586    4.624    4.324    4.324    4.324    5.561    4.324    -59.3
4.629    4.592    4.629    4.329    4.329    4.329    5.674    4.329    -60.3
4.636    4.611    4.636    4.336    4.336    4.336    5.879    4.336    -61.5
4.642    4.617    4.642    4.468    4.342    4.342    5.886    4.342    -62.8
4.661    4.624    4.661    4.474    4.348    4.411    5.924    4.348    -64.2
4.668    4.629    4.724    4.479    4.411    4.418    6.117    4.411    -65.6
4.674    4.636    4.879    4.486    4.418    4.429    6.836    4.418    -67.1
4.679    4.642    4.942    4.492    4.424    4.461    ******    4.424    -68.5
4.911    4.661    4.961    4.561    4.442    4.486    ******    4.429    -69.8
4.918    4.668    4.968    4.568    4.461    4.492    ******    4.442    -71.2
4.924    4.824    5.068    4.574    4.468    4.561    ******    4.461    -72.4


Как например считать tm75.То есть выбрать этот столбец и считать его! smile  smile 

PM MAIL   Вверх
Rodman
Дата 20.4.2007, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Ну тебе надо найти каким по счету идет tm75, а потом отсчитывать в каждой строке... учет пробелов нужен...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
AFenix85
Дата 20.4.2007, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 20.4.2007
Где: Россия,Иркутск

Репутация: нет
Всего: нет



А как это сделать?Прочел много, а результата нет!Книги на этом форуме качал!
Если можно,то помогите примерами пожалуйста smile   
PM MAIL   Вверх
Pendalf
Дата 20.4.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.4.2007

Репутация: нет
Всего: нет



Когда-то товарищ просил нечто подобное. Код писался в блокноте и не компилировался, поэтому могут быть некоторые ошибки.
Код

//открываем файл на чтение и запись
FILE *in = fopen("my_file.txt", "r"); //исходный файл
FILE *out = fopen("your_file.txt", "a+"); //выходной файл

//ставим курсор в начало файла
fseek(in, 0, SEEK_SET);

//пока не конец файла с исходными данными читаем его построчно
while(feof(in) != 0) {
   char str[80]; //длина строки от балды. Здесь на самом деле лучче подбирать экскрементально
   fgets(str, strlen(str) + 1, in); //прочитали строку из файла
   strtok(str, " ");
   strtok(NULL, " "); //удалили вторую позицию 
   strtok(NULL, " "); //удалили третью позицию
   strtok(NULL, " "); //удалили четвертую позицию
   String param = strtok(NULL, " "); //высосали наш параметр
   fprintf(out, "%s", param); //записали то что отсосали в выходной файл 
   }

//закрыли файлы по окончании обработки дабы чего-нить избежать...
fclose(in); 
fclose(out);


PM MAIL   Вверх
AFenix85
Дата 20.4.2007, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 20.4.2007
Где: Россия,Иркутск

Репутация: нет
Всего: нет



Спасибо,Pendalf.за наглядный пример smile 
Если я правильно понял,теперь мне надо все это проделать для каждого элемента
этого столбца smile 
А нельзя как нибудь по проще smile 
И еще,кто знает простой способ постройки гистограммы в форме? smile  
PM MAIL   Вверх
Klin
Дата 20.4.2007, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(AFenix85 @  20.4.2007,  17:49 Найти цитируемый пост)
А нельзя как нибудь по проще

В принципе можно smile
Код

 int l=0,x=0, E_Num =0, L_Num=0;
 for (int n = 0; n<E_Num ; n++) {
  x = ( Memo1->Lines->Strings[L_Num].SubString(l+1,Memo1->Lines->Strings[L_Num].Length()) ).Pos(" ") ;
  l+=x;
 }
 ShowMessage(Memo1->Lines->Strings[L_Num].SubString(l,Memo1->Lines->Strings[L_Num].Pos(" ")).TrimLeft());


Вроде все работает. Это пример получения столбца ( E_Num ) из строки L_Num. Позже если надо, то могу и другие функции обработки написать


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Anikmar
Дата 20.4.2007, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(AFenix85 @  20.4.2007,  16:49 Найти цитируемый пост)
Если я правильно понял,теперь мне надо все это проделать для каждого элемента
этого столбца  
А нельзя как нибудь по проще  


Так там же цикл по строчкам. Весь столбец и будет обработан. Куда уж проще?

Можно по-другому:
Считываем 1-ю строку. Это, если я правильно понял названия столбцов.
Ищем нужное название - запоминаем номер столбца с этим названием.
Дальше построчно считываем файл, выдираем из строки именно эту позицию.
Позиции считаются по пробелам (если там не табуляция)

А на счет гистограммки - в Билдере компонент есть для этого, ароде должен рисовать
PM MAIL ICQ   Вверх
AFenix85
Дата 21.4.2007, 05:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 20.4.2007
Где: Россия,Иркутск

Репутация: нет
Всего: нет



Цитата(Klin @  20.4.2007,  17:22 Найти цитируемый пост)
Позже если надо, то могу и другие функции обработки написать 


Если не трудно,то напиши пожалуйста! smile  

Цитата(Anikmar @  20.4.2007,  17:23 Найти цитируемый пост)
А на счет гистограммки - в Билдере компонент есть для этого, ароде должен рисовать 


А можешь написать?

PM MAIL   Вверх
Anikmar
Дата 21.4.2007, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(AFenix85 @  21.4.2007,  05:24 Найти цитируемый пост)
А можешь написать?


Чего написать? Компонент? Я пока даже условия задачи не увидел.

Компонент называется TChart.  Если набрать его в поиске по форуму - вылезет уйма информации. Я лично с ним никогда не работал - знаю, что он есть, но мне пока не понадобился.
PM MAIL ICQ   Вверх
AFenix85
Дата 21.4.2007, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 20.4.2007
Где: Россия,Иркутск

Репутация: нет
Всего: нет



Я тебя не понял! smile 

Цитата(Anikmar @  20.4.2007,  17:23 Найти цитируемый пост)
Позиции считаются по пробелам (если там не табуляция)


А если там табуляция,то че делать smile 

Меня эта задача уже достала,че не пробую,ниче не получается.Либо виснет,либо глючит,либо ниче не происходит smile  smile  smile  

PM MAIL   Вверх
Anikmar
Дата 21.4.2007, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(AFenix85 @  21.4.2007,  09:09 Найти цитируемый пост)
Цитата(Anikmar @  20.4.2007,  17:23 )
Позиции считаются по пробелам (если там не табуляция)



А если там табуляция,то че делать  


Очевидно считать по табуляции. А можно и все сразу.
Идем по строчке. Если символ не является разделителем - то считаем, что это значение столбца. Дошли до разделителя - увеличиваем счетчик столбцов и идем по символам пока разделители не кончаться (если их несколько подряд).
Дошли опять до рабочего символа - значит начался следующий столбец - ждем пока закончится.

Я когда очень давно (не помню зачем) писал функцию, которая возвращает слово из строки по номеру - если найду - скину

Добавлено через 3 минуты и 37 секунд
Нашел. Правда она на Билдере написана, но логика понятна, изменить ее можно, можно свою написать:
Код

//---------------------------------------------------------------------------
// Функция: MAN_GetWord
//
// Возвращает слово строки по порядку
// Пустая строка - слово отсутствует
// Source - исходная строка
// Number - номер слова
// Case = 0 - в том виде в каком оно в строке
// Case > 0 - верхний регистр
// Case < 0 - нижний регистр
AnsiString MAN_GetWord(AnsiString& Source, int Number, int Case)
{
    int i;
    bool StartWord = false;
    int NumWords = 0;
    int PosWord = 0;
    int PosEnd;
    AnsiString Result;

    for (i=1;i<=Source.Length();i++)
    {
        if (Source.IsDelimiter(" ,.!@#$%^&*()-=+|\\/<>:;`",i))
        {
        // Если символ разделитель - значит слово окончилось
            StartWord = false;
            // Если дошли до нужного слова - выхожу из цикла
            if (NumWords == Number) break;
        } // if (Source.IsDelimiter(" ,.!@#$%^&*()-_=+|\\/<>:;`",i))
        else
        {
        // Символ не разделитель
            if (!StartWord)
            {
            // Если слово не в процессе
            // Запоминаю его начало
                PosWord = i;
                StartWord = true;
                NumWords++;
            } // if (!StartWord)
            else
            {
            // Если слово в процессе - передвигаю конец
                PosEnd = i;
            } // if (!StartWord) else
        } // if (Source.IsDelimiter(" ,.!@#$%^&*()-_=+|\\/<>:;`",i)) else
    } // for (i=1;i<=Source.Length();i++)

    if (NumWords == Number)
    {
    // Если нужное слово было копирую его в результат
        Result = Source.SubString(PosWord,PosEnd-PosWord+1);
        if (Case < 0) Result = Result.LowerCase();
        if (Case > 0) Result = Result.UpperCase();
    }

    return Result;
}



Добавлено через 5 минут и 16 секунд
Тьфу. Это же и есть форум по Билдеру - совсем заработался  smile 
PM MAIL ICQ   Вверх
AFenix85
Дата 21.4.2007, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 20.4.2007
Где: Россия,Иркутск

Репутация: нет
Всего: нет



Цитата(Anikmar @  21.4.2007,  11:02 Найти цитируемый пост)
Добавлено через 5 минут и 16 секунд
Тьфу. Это же и есть форум по Билдеру - совсем заработался   


Я тоже подумал,но спасибо за пояснение! smile 

Большое спасибо за пояснения и примеры всем! smile 



PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0571 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.