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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2010, 21:00   #1
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
По умолчанию Работа с текстовым файлом

Здравствуйте.
Возникла такая задача:
Есть огромный текстовый файл( около 10 мб)
Состоит этот файл из записей-блоков, размером по 23 строки.

задачи

1. необходимо записать первые 23 строки, в текстовую переменную

2. взять первые 6 символов первой строки

3. В строке 21 между "словами" /7: и /8: есть некоторый текст, его нужно так-же извлечь в текстовую переменную file_name

4. Записать в файл с именем file_name (или дописать, если файл уже существует) эти 23 строки.

5. Переписать в эту переменную следующие 23 строки, и проделать с переменной операции 2,3,4

Очень надеюсь на вашу помощь.
)Игнат( вне форума Ответить с цитированием
Старый 11.11.2010, 21:03   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Где наработки?
BOBAH13 вне форума Ответить с цитированием
Старый 11.11.2010, 21:14   #3
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
По умолчанию

Код:
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, IdBaseComponent, IdAntiFreezeBase,
  IdAntiFreeze;

type
  TForm1 = class(TForm)
    OpnBtn: TButton;
    OpnD: TOpenDialog;
    Execute: TButton;
    PBar: TProgressBar;
    Label1: TLabel;
    Label2: TLabel;
    IdAntiFreeze1: TIdAntiFreeze;
    Info_base: TGroupBox;
    loglist: TMemo;
    procedure OpnBtnClick(Sender: TObject);
    procedure ExecuteClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
 count,records:longint;
implementation

{$R *.dfm}

procedure TForm1.OpnBtnClick(Sender: TObject);
var  F: TextFile;
S: string;

 begin
 //Открываем оч. длинный файл
      if OpnD.Execute
  then AssignFile(F, OpnD.FileName)
      else Exit; Reset(F);
      count:=1;
  //Считаем кол-во строк
while Not EOF(F) do
  begin
  count:=count+1 ;
    Readln(F,S);
  end;
//вычисляем примерное кол-во записей
 records:=count div 23;
//выводим кол-во строк и записей
 Label1.Caption:='Â Ôàéëå '+ inttostr(count) +' ñòðîê' ;
 Label2.Caption:='Â Ôàéëå ïðèìåðíî '+ inttostr(records) +' çàïèñåé' ;
CloseFile(F);
if records<>0 then Execute.Enabled:=true;
end;

//по нажатию кнопки Execute должны выполняться эти самые действа.
end.

Пусть задача 1 снята. 23 строки я понял как извлечь. цикл с операцией readln(f,s)
а с остальным прошу помочь.

Последний раз редактировалось )Игнат(; 11.11.2010 в 21:21.
)Игнат( вне форума Ответить с цитированием
Старый 11.11.2010, 23:15   #4
kangreon
Форумчанин
 
Аватар для kangreon
 
Регистрация: 03.04.2009
Сообщений: 305
По умолчанию

2:
Код:
string := copy(strings,1,6)
3:
Код:
uses StrUtils;
...
var
    i : integer;
    file_name : string;
begin
    i := pos('/7:',str21)+3;
    file_name := copy(str21,i,posex('/8:',str21,i)-i);
    if FileExist(file_name) then
    begin
    //Открываем существующий файл и дописываем весь блок
    end
    else
    begin
    // Создаем файл и записываем блок
    end
end;
kangreon вне форума Ответить с цитированием
Старый 13.11.2010, 16:29   #5
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
По умолчанию

Код:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,StrUtils;
type
  TForma = class(TForm)
    OButton: TButton;
    ExButton: TButton;
    ClButton: TButton;
    ExitButton: TButton;
    Counts: TLabel;
    rcrds: TLabel;
    Mstat: TMemo;
    Done: TLabel;
    OD: TOpenDialog;
    procedure FormCreate(Sender: TObject);
    procedure ExitButtonClick(Sender: TObject);
    procedure OButtonClick(Sender: TObject);
    procedure ClButtonClick(Sender: TObject);
    procedure ExButtonClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Forma: TForma;
//Ìîè ïåðåìåííûå
//ìàññèâ Èìåí ôàëîâ:
F_names:Array[1..40] of string =(элементы массива(оформлены правильно);

F_labels:Array[1..39] of string =(и тут);

 postdata:array[0..35] of string;

s,str,s_t:string;

Count,rcrd:integer;

F,H:TextFile;

implementation

{$R *.dfm}

procedure TForma.FormCreate(Sender: TObject);
begin

ClButton.Enabled:=false;
ExButton.Enabled:=false;
Mstat.Text:='';
OButton.Caption:='Îòêðûòü ôàéë';
ClButton.Caption:='Çàêðûòü ôàéë';
ExitButton.Caption:='Âûéòè èç ïðîãðàììû';
eXButton.Caption:='Íà÷àòü Îáðàáîòêó';
Counts.Caption:='Îòêðîéòå ôàéë äàííûõ!';
rcrds.Caption:='Îòêðîéòå ôàéë äàííûõ!';
done.Caption:='Îòêðîéòå ôàéë äàííûõ!';
end;

procedure TForma.ExitButtonClick(Sender: TObject);
begin
Forma.Close;
end;

procedure TForma.OButtonClick(Sender: TObject);
begin
   if OD.Execute
  then AssignFile(F, OD.FileName)
      else Exit;
      Reset(F);
      count:=1;
  //Çàíîñèì òåêñò â ïåðåìåííóþ
while Not EOF(F) do
  begin
    count:=count+1 ;
    Readln(F,S);
  end;
 rcrd:=count div 26;
Counts.Caption:='Â Ôàéëå '+ inttostr(count) +' ñòðîê' ;
 rcrds.Caption:='Â Ôàéëå ïðèìåðíî '+ inttostr(rcrd) +' çàïèñåé' ;
 Done.Caption:='Íàæìèòå êíîïêó Íà÷àòü Îáðàáîòêó';

 ClButton.Enabled:=true;
if rcrd<>0 then ExButton.Enabled:=true;
end;

procedure TForma.ClButtonClick(Sender: TObject);
begin
CloseFile(F);
 Counts.Caption:='Îòêðîéòå ôàéë äàííûõ' ;
 rcrds.Caption:='Îòêðîéòå ôàéë äàííûõ' ;
 Done.Caption:='Îòêðîéòå ôàéë äàííûõ' ;
 ExButton.Enabled:=false;
end;

procedure TForma.ExButtonClick(Sender: TObject);
var
//íååáè÷åñêèé ñïèñîê ïåðåìåííûõ!
i,j:byte;
fname:string;
begin
Reset(f);
i:=0;
// Ãëàâíûé öèêë
While not eof(f) do begin
// Òåëî Ãëàâíîãî öèêëà

    readln(f,s);
    s_t:=copy(s,1,6);
    postdata[i]:=s;
    i:=i+1;
    if (s_t='(((999') then
//BEGIN ÓÑëîâèå íóæíîé ñòðîêè
       Begin
        readln(f,s);
    postdata[i]:=s;
    i:=i+1;
        readln(f,s);
    postdata[i]:=s;
    i:=i+1;
{        readln(f,s);
    postdata[i]:=s;
    i:=i+1;   }
         //ÖÈÊË Ïî Ìàññèâó èìåí, çàïñèñü â ôàéë
          for j:=1 to 39 do
        //Òåëî öèêëà
            begin
            if AnsiContainsStr(UTF8ToAnsi(s),UTF8toAnsi(F_labels[j])) then
              begin
              fname:=f_names[j]
              end
            else
              begin
              fname:=f_names[40];

           end;
readln(f,s);// ВОТ здесь выдается ошибка 103.
    postdata[i]:=s;
    i:=i+1;
        assignFile(h,fname);

{        if FileExists(fname) then
    begin
   //Îòêðûâàåì ñóùåñòâóþùèé ôàéë è äîïèñûâàåì âåñü áëîê
    writeln(h,str);
    closefile(h);
    end
    else
    //Ïèøåì â óæå èìåþùèéñÿ
    begin
    reWrite(h);
    writeln(h,str);
    closefile(h);
    // Ñîçäàåì ôàéë è çàïèñûâàåì áëîê
}
    end;
    end;
    end;
end;
end;
end.
Выдается ошибка 103
файл открыт, доступ есть, имя правильное.
Если снова попробовать открыть - то выдается ошибка 104.
)Игнат( вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстовым файлом. tae1980 Microsoft Office Excel 10 29.06.2010 19:16
Работа с текстовым файлом bles Паскаль, Turbo Pascal, PascalABC.NET 3 18.04.2010 01:09
Работа с текстовым файлом Mashul'ka Помощь студентам 1 03.06.2009 23:26
Работа с текстовым файлом Smartbass Паскаль, Turbo Pascal, PascalABC.NET 3 22.05.2009 20:40
Работа с текстовым файлом Vasya Помощь студентам 28 24.01.2008 01:15