Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++ Builder] импорт txt в таблицу, как правильно написать цикл.... 
V
    Опции темы
SAnatoliy
Дата 17.3.2009, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 Помогите пожалуйста. С++ Builder 5.
 
  Нужно разобрать текстовый файл и перенести все содержимое в таблицу для дальнейшей обработки.

текстовый файл строго определенного формата:
8 столбцов разделенные пробелом. значения в столбцах могут быть разной дилнны, но не более прив. фрагмента.

   Есть текстовый файл данной структуры: 
   !а123456 0987654 б123456 1234567 01-01-09 00:00:00 10 20 
   !а123456 0987654 б123456 1234567 01-01-09 00:00:00 10 20 
   и т.д. 


Как я понимаю мне надо написать цикл:
  Считываем колличество строк в файле и запускаем цикл -> берем одну строку и присваем значения столбцов переменным -> пишем в БД -> и так до последней строки текстового файла.

 
Может есть решение лучше. Но я незнаю. Помогите пожалуйста примером.

PM MAIL   Вверх
Rififi
Дата 17.3.2009, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



SAnatoliy, 

Как я понимаю мне надо написать цикл:
  Считываем колличество строк в файле и запускаем цикл -> берем одну строку и присваем значения столбцов переменным -> пишем в БД -> и так до последней строки текстового файла.


это подойдёт, если тебе для чего-то  нужно знать общее количество строк в файле.
иначе крути цикл пока не конец файла и по-очереди доставай строки
PM MAIL   Вверх
SAnatoliy
Дата 17.3.2009, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Rififi @ 17.3.2009,  18:53)

иначе крути цикл пока не конец файла и по-очереди доставай строки


 Согласен с Вами. 

 А может кто нибудь показать на примере как писать сие надо  smile 
PM MAIL   Вверх
Rififi
Дата 17.3.2009, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



SAnatoliy, 
Код
std::ifstream ifs("data.txt");
if (!ifs.good()) error();
while (!ifs.eof())
{
    std::string s;
    std::getline(ifs, s);
    // Разбираем полученную строку, достаём параметры, запихиваем в БД...
}

PM MAIL   Вверх
SAnatoliy
Дата 17.3.2009, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Rififi @ 17.3.2009,  20:50)
SAnatoliy, 
Код
std::ifstream ifs("data.txt");
if (!ifs.good()) error();
while (!ifs.eof())
{
    std::string s;
    std::getline(ifs, s);
    // Разбираем полученную строку, достаём параметры, запихиваем в БД...
}

Прошу прощение конечно(. 

Но можно подробней как: Разбираем полученную строку, достаём параметры,
PM MAIL   Вверх
dumb
Дата 17.3.2009, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



http://forum.vingrad.ru/index.php?showtopi...t&p=1144166

ps. если этого будет недостаточно для самостоятельного решения, то тема уедет в "Центр помощи".
PM MAIL   Вверх
Rififi
Дата 17.3.2009, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



SAnatoliy, 
например, с помощью std::stringstream или sscanf. Юзай поиск по форуму и/или гоогле

Это сообщение отредактировал(а) Rififi - 17.3.2009, 21:41
PM MAIL   Вверх
mrbrooks
Дата 18.3.2009, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Тут решений воз и целая тележка. Я бы работал со списками.
PM MAIL   Вверх
dumb
Дата 18.3.2009, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Модератор: Тема перенесена!
PM MAIL   Вверх
SAnatoliy
Дата 18.3.2009, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Может кто нибудь набросать работающий пример. Пожалуйста.
PM MAIL   Вверх
zim22
Дата 18.3.2009, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(SAnatoliy @  17.3.2009,  17:34 Найти цитируемый пост)
 пишем в БД ->

разве в БД нет импорта с текстовых файлов?
если есть - просто преобразуй твой текстовый файл к необходимому формату. например csv


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


Шустрый
*


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

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



Цитата(zim22 @ 18.3.2009,  11:11)
Цитата(SAnatoliy @  17.3.2009,  17:34 Найти цитируемый пост)
 пишем в БД ->

разве в БД нет импорта с текстовых файлов?
если есть - просто преобразуй твой текстовый файл к необходимому формату. например csv

есть, но мне надо у себя и просто в таблицу, а в БД это уже пожже..

Код

std::ifstream ifs("data.txt");
if (!ifs.good()) error();
while (!ifs.eof())
{
    std::string s;
    std::getline(ifs, s);

      кто набросает код.
      пример. как разобрать строку?      
      пример.  как переменным а1 и а2 присвоить значение столбцов?  

}


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


depict1
****


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

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



Код

#include <iostream>
#include <fstream>

using namespace std;

std::ifstream ifs("data.txt");
if (!ifs.good()) error();
while (!ifs.eof())
{
    std::string s;
    std::getline(ifs, s);

      std::string a1, a2;
      istringstream is(s);
      while(is >> a1 >> a2)
      {std::cout << a1 << "\t" << a2 << std::endl; }

}



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


Шустрый
*


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

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



а можно комментарии к коду?

Код

#include <iostream>
#include <fstream>

using namespace std;

std::ifstream ifs("data.txt");
if (!ifs.good()) error();
while (!ifs.eof())
{
    std::string s;
    std::getline(ifs, s);

      std::string a1, a2;
      istringstream is(s);
      while(is >> a1 >> a2)
      {std::cout << a1 << "\t" << a2 << std::endl; }

}


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


depict1
****


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

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



Код
include <iostream> // нужен для cout
#include <fstream> // нужен для ifstream 

using namespace std; // используем пространство имён std (чтобы не писать std:: )

std::ifstream ifs("data.txt"); // свзяли поток ifs c файлом data.txt
if (!ifs.good()) error(); // проверили, успешно ли открылся файл
while (!ifs.eof()) // пока до конца файла не дошли, выполняем тело цикла
{
    std::string s; // создали объект типа string
    std::getline(ifs, s); // "проглотили" одну строку из data.txt в s

      std::string a1, a2;
      istringstream is(s); // создали объект типа istringstream. связали его со строкой s. 
      while(is >> a1 >> a2)  // считываем два слова
      {std::cout << a1 << "\t" << a2 << std::endl; } // выводим два слова

}




--------------------
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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