Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2010, 21:21   #1
Panika
Пользователь
 
Регистрация: 08.11.2009
Сообщений: 28
Восклицание "нарезчик" в консольном приложении

Дан текстовый файл. В нем все данные из одной таблицы записаны в строчку и разделены " | ". Каждая таблица имеет свой id. Необходимо по этим id раскидать таблицы по разным текстовым файлам. Объем данных очень большой. И система должна быть полностью автоматизированной.
Теоритически я понимаю как это сделать, а вот в практике немного сложновато...столкнулась с этим впервые...
Помогите, плиз!!!
Panika вне форума Ответить с цитированием
Старый 12.01.2010, 21:48   #2
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

id каким образом определяется?
не плохо было бы, если бы вы привели пример входных данных
Alex_FF вне форума Ответить с цитированием
Старый 12.01.2010, 21:57   #3
Panika
Пользователь
 
Регистрация: 08.11.2009
Сообщений: 28
По умолчанию

id числовое.
1|22.10.2009|39|1|39|9013|13|37|0|1 2|118|149679|149679|0|0||21.10.2009 |23.10.2009|10:07|13|0|0|0|00:00|0| 0|0|0|0|0|0|0|0|149679|0|0|0|0|860 это id№1
2|9801|0|840|26.94|1|0.00|0|0|0||| это №2
и т.д.
Panika вне форума Ответить с цитированием
Старый 12.01.2010, 22:00   #4
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

во входном файле id где записывается?
"очень большой объем данных" это какой? и какие ограничения на время работы программы?
Alex_FF вне форума Ответить с цитированием
Старый 12.01.2010, 22:07   #5
Panika
Пользователь
 
Регистрация: 08.11.2009
Сообщений: 28
По умолчанию

первая цифра это id. дальше идут поля таблицы в строчном виде.
Очень большой это от 100 КБ. и таких данных будет очень много.
Время...по поводу времени ничего не сказано...главное чтобы преобразовывалось, т.к. эти данные будут использоваться в дальнейшем
Panika вне форума Ответить с цитированием
Старый 12.01.2010, 22:09   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

т.е. в исходном файле в каждой строке есть набор данных с id всегда впереди и нужно раскидать строки с одним id каждую в свой файл? если id всегда идет первым до "|" в каждой строке, то перебирайте все строки, проверяя id через pos() до символа "|". Можно в цикле через readln, а можно и в stringlist загрузить.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 12.01.2010, 22:15   #7
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

ну я так понимаю, что структура входного файла вот такая:
1 |данные
2 |данные
...
N |данные

тогда можно считывать по строкам, пока не достигнем конца файла, и зыписывать в файл, соответствующй номеру id строку с удаленным id
Alex_FF вне форума Ответить с цитированием
Старый 12.01.2010, 22:15   #8
Panika
Пользователь
 
Регистрация: 08.11.2009
Сообщений: 28
По умолчанию

о stringlist даже понятия не имею)))
попробую через readln, спасибо!
Panika вне форума Ответить с цитированием
Старый 12.01.2010, 22:18   #9
Panika
Пользователь
 
Регистрация: 08.11.2009
Сообщений: 28
По умолчанию

да, такая структура.
ну теоритически я это понимаю...а вот с практической точки зрения не очень...раньше в консольном приложении не работала)))
Panika вне форума Ответить с цитированием
Старый 12.01.2010, 22:32   #10
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

вот пример на Delphi:
Код:
program Project2;

{$APPTYPE CONSOLE}
{$S+}

uses
  SysUtils;

const
  Source = 'input.txt';

var
  S, Target: String;
  I, Index: Integer;
  FI, FT: Text;
begin
  Reset(FI, Source);
  while not EOF(FI) do
  begin
    ReadLn(FI, S);
    Index := Pos('|', S);
    Target := '';
    for I := 1 to Index - 1 do  // получам id - будем его использовать как имя файла
      Target := Target + S[I];
    Assign(FT, Target);
    {$I-}
    Rewrite(FT);
    {$I+}
    if IOResult = 0 then
    begin
      Delete(S, 1, Index - 1);
      WriteLn(FT, S);
      Close(FT);
    end;
  end;
end.
Alex_FF вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Борьба с крякозябрами в консольном приложении fs444 C++ Builder 16 15.12.2009 19:04
Как создать базу данных в консольном приложении Lamarq Общие вопросы C/C++ 0 17.11.2009 21:07
Русский язык в консольном приложении С++ на VS2008 Munch Помощь студентам 3 17.10.2009 17:33
Цвет текста в консольном приложении Linux a10nan Общие вопросы C/C++ 14 21.08.2009 23:41
Содержимое экрана в полноекранном консольном приложении Роман Радер Win Api 1 29.03.2009 20:04