|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Чтение текстового файла по позициям и запись их в Exel
ЗдрасьТе!!! Сразу к делу, у меня случилось беда, т. к. я начинающий программист на Delphi. На работе мне задали задачку прочитать текстовый файл по позициям определенно установленным, и засунуть их в Exel . Сколько читал литературы, искал в инете ни чего похожего не нашел!!! Или если я совсем лаймер ткните палецем где надо читать!!!
Заранее Спасибо!!! |
#2
|
|||
|
|||
Чтение - считываешь в TStringList, далее разбираешь. Какие признаки позиции?
Запись - см в ФАКе работу с Экселем через OLE-автоматизацию. |
#3
|
|||
|
|||
Я конечно может и чайник, но что имеешь в виду под словами признаки позиции???
|
#4
|
|||
|
|||
"что имею, то и введу" (с)
как определяются позиции данных в текстовом файле? Заранее известны или определяются каким-либо спецсимволом? |
#5
|
|||
|
|||
Да известны. Но только в тексте идут только цифры вот их мне и надо вставить, пример откуда надо взять данные вот:
00022008543454334544335435435354353435...максималь но 1433 символа 00022008435434958349504390349304894090...максималь но 1433 символа и надо взять данные из первой строки с 5 позиции по 8??? и засунуть их в Exel(ну это ты уже сказал как делать и за это спасибо!!! ). |
#6
|
|||
|
|||
Только из первой строки с 5 ао 8 позиции включительно. Так?
|
#7
|
|||
|
|||
Вот в том то и дело что строк может быть бесконечно!!! И я для примера привел только один такой запрос 5 по 8, а так их тоже очень много!!!
|
#8
|
|||
|
|||
Так сколько строк из файла надо обрабатывать?
|
#9
|
|||
|
|||
Все но примерно максимальное количество может доходить до 10000!!! Во как
|
#10
|
|||
|
|||
OK. вот код, который читает файл в через callback возвращает выреанные подстроки (с 5 по 8 позиции включительно). Если будут проблемы с подключением, то пиши.
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TDataCallBack = procedure (AData : String) of object; TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; OpenDialog1: TOpenDialog; procedure Button1Click(Sender: TObject); private { Private declarations } procedure DataCallBack(AData : String); public { Public declarations } procedure ReadDataFromFile(AFileName : String; ACallBack : TDataCallBack = Nil); end; var Form1: TForm1; implementation {$R *.dfm} { TForm1 } procedure TForm1.DataCallBack(AData: String); begin Memo1.Lines.Add(AData); end; procedure TForm1.ReadDataFromFile(AFileName: String; ACallBack: TDataCallBack); var F : TextFile; Buf : String; begin If (@ACallBack = Nil) Or (Not FileExists(AFileName)) Then Exit; AssignFile(F,AFileName); Reset(F); While Not Eof(F) Do Begin ReadLn(F,Buf); If Length(Buf) >= 8 Then ACallBack(Copy(Buf,5,4)); End; CloseFile(F); end; procedure TForm1.Button1Click(Sender: TObject); begin If OpenDialog1.Execute Then Begin Memo1.Lines.Clear; ReadDataFromFile(OpenDialog1.FileName,DataCallBack); End; end; end. |
#11
|
|||
|
|||
СПАСИБОЧКИ!!! А можно еще один вопрос, а если таких с 5 по 8 или допустим с 10 по 16, это для каждой другой позиции писать отдельный код???
|
#12
|
|||
|
|||
Если тебе одновременно надо и то, и то, то можно расширить этот код.
Если в звисимости от файла, то надо где-то вводить эти позиции и переписать выделение на переменные. |
#13
|
|||
|
|||
А все понял!!! Ты меня выручил еще раз СпаСибо!!!
|