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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2010, 13:38   #1
marisham0612
 
Регистрация: 17.12.2009
Сообщений: 4
Вопрос Импорт данных из тхт в Delphi

Добрый день.
Не могу придумать как реализовать следующий проект. Может кто-то с таким сталкивался и может помочь.
Задача в следующем - у меня есть тхт файл с данными, которые нужно вывести в фастрепорт. Но проблема в том, что кол-во колон в тхт не одинаковое от строки к строке - 1.строка - 3 колонны, 2.строка - 1колонна, 3.строка - 7колонн. Пример:

Код:
ENV-START|LDC07064P10001|
LANDSCAPE
01A|VERONIKA||ME|Va|Ai|5106
01B|Nr. 7-0251|Ori|05.03.2007|LV000057210050|Smui|20.02.2007|V|sarka|23.02.2007|LB|LV000057210030|SWE93442|NS 25.00% |LB 6.25%|
01C|20.02.2007|LV1000572||||||||||||||||||
01D|20.02.2007|LV0000572||||||||||||||||||
ENV-START|LDC07064P10002|
LANDSCAPE
01A|Lejas||Lejas|Kur|Ais|5115
01B|Nr. 7-0251|Oriģ|05.03.2007|LV000205310040|Viza|22.01.2007|S|brūna|24.01.2007|XP|LV000235510006|LV038790110017|ZS 40.62%||
01C|22.01.2007|LV1002053||||||||||||||||||
01D|22.01.2007|LV0002053||||||||||||||||||
Помогите решить такую проблему??
marisham0612 вне форума Ответить с цитированием
Старый 06.04.2010, 14:58   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

А вы как хотите вывести на печать ... в виде таблицы? Может Кросс отчёт поможет?
SERG1980 вне форума Ответить с цитированием
Старый 06.04.2010, 15:54   #3
marisham0612
 
Регистрация: 17.12.2009
Сообщений: 4
По умолчанию

Нее, к сожалению не в виде таблици. Должна быть заполнена определнённый бланк - ENV-START должен означать новой лист, а далее следует информация для этого бланка, потом опять ENV-START - новый бланк с новими данными.
marisham0612 вне форума Ответить с цитированием
Старый 06.04.2010, 16:37   #4
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

ИМХО здесь предельно все просто, считываете строку ReadLn, проверяете на наличие в конце символа "|", если нету ставите его, потом к примеру в двумерный массив заносите данные которые разделены "|" функциями copy, Pos и т.п. там где не достает столбцов записываете 0 (ноль). А с массивом уже можно выполнять различные операции, в том числе вывод в фастрепорт.
Не забываем говорить спасибо за помощь - это ведь так приятно

Последний раз редактировалось Sanprof; 06.04.2010 в 16:38. Причина: дополнил
Sanprof вне форума Ответить с цитированием
Старый 06.04.2010, 17:08   #5
marisham0612
 
Регистрация: 17.12.2009
Сообщений: 4
По умолчанию

Sanprof
Не могли бы Вы уточнить как мне добавлять символ |, если он отсутствует??

Спасибо за помощь.
marisham0612 вне форума Ответить с цитированием
Старый 06.04.2010, 19:27   #6
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

Код:
ReadLn(F,str);
len := length(str);
s := copy(str,len,1);
if s <> '|' then //если последний символ не равен '|'
  str := str + '|'; //то тогда добавим его
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 07.04.2010, 19:30   #7
_Flyer_
Новичок
Джуниор
 
Регистрация: 07.04.2010
Сообщений: 2
По умолчанию

Добрый вечер, столкнулся с такой же проблемой
имеем файл на входе :
100000111|boooooa||
100000121||sdfdsf|
101210212|dsfds||dsfsdf
никак не могу победить данного зверя на предмет чтения строки и выбора значений по каждому разделителю вплоть до того что есть между пустыми разделителями.
Подскажите плиз как с этим бороться?
Заранее спасибо
_Flyer_ вне форума Ответить с цитированием
Старый 07.04.2010, 21:09   #8
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от _Flyer_ Посмотреть сообщение
Добрый вечер, столкнулся с такой же проблемой
имеем файл на входе :
100000111|boooooa||
100000121||sdfdsf|
101210212|dsfds||dsfsdf
никак не могу победить данного зверя на предмет чтения строки и выбора значений по каждому разделителю вплоть до того что есть между пустыми разделителями.
Подскажите плиз как с этим бороться?
Заранее спасибо
Когда-то написал функцию:

Код:
uses ...,StrUtils;

....

function TForm1.ReadDataStr(Tabul: string; var S: string): string;
var PosTab: integer; //позиция разделителя в строке
begin
  Result := '';
  PosTab := Pos(Tabul,S)-1;
  if PosTab >= 0 then
    begin
      {Возвращаю порцию данных}
      Result := Copy(S,1,PosTab);

      {Обрезаю исходную строку}
      S := AnsiRightStr(S,Length(s)-PosTab-Length(Tabul));
    end
  else
    begin
      Result := S;
      S := '';
    end;
end;
а так функцией пользоваться:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var S1: string;
begin
  S1 := '101210212|dsfds||dsfsdf';
  while Length(S1)>0 do ShowMessage(ReadDataStr('|',S1));
end;
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт данных их Excel в Delphi betirsolt БД в Delphi 2 17.01.2010 14:25
Сайт - шлюз данных из XML или любого др. тхт в имеющуюся MySQL базу foxxy_dretty Фриланс 3 25.08.2009 12:40
импорт данных Рокабіллі_Птах БД в Delphi 1 13.05.2008 18:49
Импорт внешних данных asale Microsoft Office Excel 1 15.04.2007 00:41
Импорт данных Таня84 БД в Delphi 4 17.02.2007 20:43