Поиск:

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


Эксперт
***


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

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



Код, который я писал ранее, не всегда вывод нужное значение.

Вот исходник, с основными функциями:


Присоединённый файл ( Кол-во скачиваний: 22 )
Присоединённый файл  sample.zip 6,95 Kb


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


Новичок



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

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



Извиняюсь перед всеми smile 

Цитата(AFenix85 @  20.4.2007,  11:20 Найти цитируемый пост)
Как например считать tm75.То есть выбрать этот столбец и считать его!    


Мне надо весь столбец считать в массив,для последующей его обработки!
Я в С++Builder'e новичек,многого не знаю! smile 

 
Цитата(Anikmar @  21.4.2007,  11:02 Найти цитируемый пост)
Добавлено через 3 минуты и 37 секунд
Нашел. Правда она на Билдере написана, но логика понятна, изменить ее можно, можно свою написать:


Извини меня за мою тупость,но не мог бы ты обьяснить то, че ты скинул smile .До меня ниче не дошло,че,где и как там все происходит smile  

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


Новичок



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

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



Цитата(Klin @  21.4.2007,  14:40 Найти цитируемый пост)
Присоединённый файл ( Кол-во скачиваний: 1 ) 
  sample.zip 6,95 Kb


Посмотрел на прогу,но она не запускается,выдает ошибку:

[Linker Fatal Error] Fatal: Unable to open file 'DCLUSR.BPI'

Че это может поможешь? smile 
PM MAIL   Вверх
Klin
Дата 21.4.2007, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Пересохранил, если не заработает , значит что-то у в настройках у тебя не то. 

p.s. можешь просто создать свою программу на основе моей.



Присоединённый файл ( Кол-во скачиваний: 25 )
Присоединённый файл  sample.zip 7,13 Kb


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


Новичок



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

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



Ага работает,но че мне делать, если я не знаю че,что делает в проге. smile 

Klin. напиши коменты пожалуйста smile 


Да,забыл мне надо весь столбец считать в массив,для последующей его обработки!
Я в С++Builder'e новичек,многого не знаю!Помого с алгоритмом smile   


Это сообщение отредактировал(а) AFenix85 - 21.4.2007, 16:14
PM MAIL   Вверх
Klin
Дата 21.4.2007, 16:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(AFenix85 @  21.4.2007,  17:11 Найти цитируемый пост)
Klin. напиши коменты пожалуйста 

Сорри, заработался...
Перемменные:
  •  Pos  - номер символа, с которого считывается ячейка
  •  LastPos - последний символ считывания
  •  text - нужен для сокращения кода, получения длинны (в процедуре изменения)
  •  NowX и NowY - номер строки и столбца
Код

 /* ПОЛУЧЕНИЕ НУЖНОЙ ЯЧЕЙКИ (Action1) */
 Pos = 0; // обнуляем Pos, иначе не будет правильных вычислений
 text = Memo1->Lines->Strings[NowY]; text+=" ";
 // присваение строки из Edit2 и добавление к ней пробела для правильности определеня

 for (int n = 0; n<NowX; n++)
  Pos+=text.SubString(Pos,text.Length()).TrimLeft().Pos(" ");
 // поиск столбца под номером из Edit1

 LastPos =  text.SubString(Pos,text.Length()).TrimLeft().Pos(" ");
 // запоминаем позицию окончания текста найденной ячейки

 text = text.SubString(Pos,LastPos).TrimLeft();
 /* запоминаем полученное значение текста (из промежутка Pos - LastPos)
    для дальнейшего использования в программе */


Код

 /* ПОЛУЧЕНИЕ ЗНАЧЕНИЯ ЯЧЕЙКИ (Button1) */
 NowX = Edit1->Text.ToInt();  //  из Edit1 - номер строки
 NowY = Edit2->Text.ToInt();  //  из Edit2 - номер столбца
 Action1->Execute();  // поиск ячейки
 Edit3->Text = text;  // вывод полученной ячейки

Код

 /* ИЗМЕНЕНИЕ ЗНАЧЕНИЯ ЯЧЕЙКИ (Button2) */

 Action1->Execute(); // поиск ячейки
 if (Pos) text+=" "; // если мы имеем дело с первым ячейкой, то добавляем длинну строки

 Memo1->Lines->Strings[Edit2->Text.ToInt()]=
 Memo1->Lines->Strings[Edit2->Text.ToInt()].Delete(Pos+1,text.Length());
 // удаление старого значения ячейки

 Memo1->Lines->Strings[Edit2->Text.ToInt()]=
 Memo1->Lines->Strings[Edit2->Text.ToInt()].Insert(AnsiString(Edit4->Text+" "),Pos+1);
 // добавление нового значения

Код

 /* УДАЛЕНИЯ ЯЧЕЙКИ (Button3) */
 Action1->Execute(); // поиск ячейки
 if (Pos) text+=" "; // если мы имеем дело с первым ячейкой, то добавляем длинну строки

 Memo1->Lines->Strings[Edit2->Text.ToInt()]=
 Memo1->Lines->Strings[Edit2->Text.ToInt()].Delete(Pos+1,text.Length());
 // удаление старого значения ячейки (полное удаление)

Код

 /* ПЕРЕДАЧА СТОЛБЦА В МАССИВ (Button4) */
 AnsiString m[30]; // Объявление массива
 NowX = Edit1->Text.ToInt();  //  Edit1 - номер строки
 for (int n = 0; n<Memo1->Lines->Count; n++)
 { NowY = n; Action1->Execute();  m[n+1] = text; }
 // добавлении в Memo2 всех строк NowX из столбца NowY

 for (int n = 1; n<Memo1->Lines->Count; n++)
  Memo2->Lines->Add(m[n]);
 // Работа с массивом (вывод данных в Memo2)

Весомый пост  smile 


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


Новичок



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

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



Балин smile 
Как много инфы,ну ни че,будем фильтровать! smile  
PM MAIL   Вверх
AFenix85
Дата 22.4.2007, 05:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



klin помоги,че он ругается в написаном сверху?

[C++ Warning] Unit1.cpp(77): W8004 'NowY' is assigned a value that is never used
[C++ Warning] Unit1.cpp(77): W8004 'NowX' is assigned a value that is never used

А кто знает как сделать такую вещь:
1.В папке лежат файлы *.dat
2.*.dat содержат эти самые таблицы
3.На форме в Edit пишем название *.dat, и прога сама открывает файл, какой нужно 

Это сообщение отредактировал(а) AFenix85 - 22.4.2007, 10:29
PM MAIL   Вверх
Anikmar
Дата 22.4.2007, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(AFenix85 @  22.4.2007,  05:21 Найти цитируемый пост)
А кто знает как сделать такую вещь:
1.В папке лежат файлы *.dat

Воспользуйтесь диалогом TOpenDialog - тогда пользователь еще и сможет выбрать нужный файл из любого места на диске
PM MAIL ICQ   Вверх
AFenix85
Дата 22.4.2007, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Anikmar @  22.4.2007,  11:28 Найти цитируемый пост)
Воспользуйтесь диалогом TOpenDialog 


А можно примерчик,а то я не знаю как!

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


Эксперт
****


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

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



Цитата(AFenix85 @  22.4.2007,  11:42 Найти цитируемый пост)
А можно примерчик,а то я не знаю как!


Да в общем то - 3 действия

1. Размещаем на форме нужный диалог (палитра Dialogs - там есть разные)
2. Размещаем на форме кнопку "Открыть файл"
3. В обработчике этой кнопки пишем
if (OpenDialog1->Execute())
{
    MyOpenFile(OpenDialog->FileName);
}

Ну, конечно, это самый элементарный вариант. Посмотрите хелп по диалогу - у него куча настроек, масок и т.п.
Можно выбрать несколько файлов, можно создаватьих при отсутствии - в общем очень наглядно, полезно и нужно (для законченности)

Писал по памяти - если где очепятка - я не виноват.
PM MAIL ICQ   Вверх
AFenix85
Дата 22.4.2007, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Извини Anikmar,я ошибся,мне не надо его непосредственно открывать,а надо считать нужный столбец smile 
Просто хочется,чтобы прога все делала сама,и сама искала этот файл на диске,а его имя вводить в Editе!
Также в Edite вводить название столбца и прога его нашла и считала в массив для последующей его обработки! smile 
Многого не знаю и потому прошу  smile  с коментами,если не трудно smile 
PM MAIL   Вверх
Klin
Дата 22.4.2007, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(AFenix85 @  22.4.2007,  06:21 Найти цитируемый пост)
[C++ Warning] Unit1.cpp(77): W8004 'NowY' is assigned a value that is never used
[C++ Warning] Unit1.cpp(77): W8004 'NowX' is assigned a value that is never used

Это означает, что вы не используете эти переменные в своей программе.

Цитата(AFenix85 @  22.4.2007,  16:11 Найти цитируемый пост)
а его имя вводить в Editе!

Код

 Memo1->Lines->LoadFromFile(Edit1->Text);


Цитата

Также в Edite вводить название столбца и прога его нашла и считала 


Для этого можно так написать:
Код

 AnsiString temp = Memo1->Lines->Strings[0]; temp+=" ";
  // создаем строку для временного поиска
 NowX=0; NowY=0; Action1->Execute();
  // обнуляем значения и получаем первый заголовок

while (Pos < temp.Length()) {
// до тех пор пока все проелы не найдем

 if (text.Trim() == Edit5->Text) {
  // проверяем совпадения полученного заголовка (text) и искомого (Edit5)
   Edit1->Text = NowX; // необъходимо для использования следующей функции
   Button4->Click();  // функция "ПЕРЕДАЧА СТОЛБЦА В МАССИВ"
   break;         // убиваем цикл
  }
  NowX++; Action1->Execute(); // получаем следующий заголовок
 }


Это сообщение отредактировал(а) Klin - 22.4.2007, 16:33


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


Добрый человек
**


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

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



Народ, сори что влезу щас не в тему, но для себя я обнаружил новшество, когда решал эту задачу. Оказывается если строка, к примеру имеет длину 21 символ, то при счтитывании с помошью функции getline(); до конца строки ( '\n' ), кол-во счытанных эллементов = длине строки +1, и + конец строки. Имеем мы к примеру файл:
FG12 HG23 RT43       
9.12 1.23 1.44  
1.45 4.67 1.45 
1.34 5.67 1.23  
Поправте если не прав.

Код

#include<conio>
#include<stdio>
#include<cstdio>
#include<stdlib>
#include<iostream>
#include<fstream>

void main()
{

  std::fstream from("C://test/test.txt", std::ios::in | std::ios::binary);
   if(!from){
    std::cout<<"Not File";
    getch();
    return;
   }
  int i=0; 
   char *ch = (char *)malloc(12);

  from.getline(ch, 123, '\n');
  int n, j; char get[5]={0};
  for(n=0; n<3; n++){
   i=from.tellg(); 
   std::cout<<i<<"\n";  //Выдаст 16, символ перед которым остоновится курсор, хотя строка, которую считали в буфер имеет длину 14 (13 по индексу) + 1 непонятный символ + конец строки "\n" 
   i+=5; 
   from.seekg(i);
   for(j=0; j<4; j++){
    from.get(get[j]); 
   }
   std::cout<<get<<"\n";
   from.getline(ch, 123, '\n'); 
  }
  char c='1';
  i=c-48;
  std::cout<<i<<"\n";
   getch();
}


Да кстати, если нужно вбить в массив именно числа, то придется конвертить побитово char символы в числа, с целыми числами это не проблема, разница между символом '1' и числом 1  = 48, а вот с нецелыми придется работать с мантисой. 


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
AFenix85
Дата 23.4.2007, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Klin @  22.4.2007,  16:04 Найти цитируемый пост)
Это означает, что вы не используете эти переменные в своей программе.


Это я понял,а зачем ты их тогда мне написал,путать то зачем,мне итак плохо smile 


Напишите пожалуйста код!
1.Из Edit1 считываем, например, tm75
2.В примере моей таблицы,просмотреть 1 строку и найти номер столбца tm75
3.Как написать условие проверки  
4.Номер вывести в Memo1

Для меня,новичка,это затруднительно smile 


Это сообщение отредактировал(а) AFenix85 - 23.4.2007, 12:58
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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