edycja archiwum gg

MadHornet

Użytkownik
Dołączył
Czerwiec 7, 2003
Posty
37
umie ktoś zmieniać teksty tam zawarte? np koleś coś powiedział a ja tam pomajstruje i w archiwum będzie jakby napisał coś zupełnie innego?
 

NiuNio

Użytkownik
Dołączył
Listopad 18, 2002
Posty
953
nie da sie poniewaz archiwum jest zapisane w pliku *.dat a nie *.txt
wiec nie da rady, no chyba ze byl by program do edycji plikow w formacie *.dat - moze wtedy sie by dalo - chociaz watpie
 

sWhite

Użytkownik
Dołączył
Marzec 14, 2002
Posty
203
no jasne ze by sie dalo
tylko trzeba rozgrysc jak jest zapisywane to archiwum
bo napewno na poczatku pliku jest zapisane ile znakow jest w tym archiwum i jeszcze jakies inne info
jak to rozgryziesz to piszesz program ktory bedzie edytowal to archiwum
 

sWhite

Użytkownik
Dołączył
Marzec 14, 2002
Posty
203
tu masz kod takiego programiku napisany w pascalu znalazlem na google juz na pierwszej stronce:

Kod:
{DAT2TXT v0.90- Free DOS utility: Converts .QWK MESSAGES.DAT to text.}

{$V-,S-}

program DAT2TXT;

uses dos;

const

   Seperator = '---------------------------------------------------------------------------';

   herald    = '===========================================================================';

type

   CharArray = array[1..6] of char;  { to read in chunks }



   MSGDATHdr = record  { ALSO the format for SWAG files !!! }

      Status   : char;

      MSGNum   : array [1..7] of char;

      Date     : array [1..8] of char;

      Time     : array [1..5] of char;

      UpTO     : array [1..25] of char;

      UpFROM   : array [1..25] of char;

      Subject  : array [1..25] of char;

      PassWord : array [1..12] of char;

      ReferNum : array [1..8] of char;

      NumChunk : CharArray;

      Alive    : byte;

      LeastSig : byte;

      MostSig  : byte;

      Reserved : array [1..3] of char;

   end;



var

   F           : file;

   txtfile     : text;



procedure showhelp(problem:byte); {if any *foreseen* errors arise, we are sent}

                             { here to give a little help and exit peacefully }

const

 progdata = 'DAT2TXT v0.90- Free DOS utility: Converts .QWK MESSAGES.DAT to text.';

 progdat2 = '(By SWAG contributors.)';

 usage    = 'Usage:  DAT2TXT infile(s) [/o]';

 usag2    = 'The "/o" causes DAT2TXT to overwrite (not append to) existing messages.txt.';

 note     = 'DOS * and ? wildcards ok with "infile(s)".  Output is always to MESSAGES.TXT.';

var

   message : string[80];

begin

   writeln(progdata);                  { just tell user what this program   }

   writeln(progdat2);                  { is and who wrote it                }

   writeln;

   writeln(usage);

   writeln(usag2);

   writeln(note);

   writeln;

   writeln('Error encountered:');

   case problem of

     1 : message := 'Incorrect number of parameters.';

     { plenty of room for other errors! }

   else

        message := 'Unknown error.';

   end;

   writeln(message);

   halt(problem);

end;



function converttoupper(w : string) : string;

var

   cp  : integer;        {the position of the character to change.}

begin

     for cp := 1 to length(w) do

         w[cp] := upcase(w[cp]);

     converttoupper := w;

end;



function ArrayTOInteger ( B : CharArray; Len : byte ) : longint;



var I : byte;

    S : string;

    E : integer;

    T : integer;



begin

   S := '';

   for I := 1 to Len do

      if B[i] <> #32 then S := S + B[i];



   Val ( S, T, E );



   if E = 0 then

      ArrayToInteger := T

   else

      ArrayToInteger := 0;

end;



procedure ReadWriteHdr ( var HDR : MSGDatHdr );

begin

   BlockRead ( F, Hdr, 1 );

   if ArrayToInteger ( Hdr.NumChunk, 6 ) <> 0 then

      with Hdr do begin

         writeln ( txtfile, herald );

         write ( txtfile, 'Date: ', Date, ' (', Time, ')' );

         writeln ( txtfile, '' : 23, 'Number: ', MSGNum );

         write ( txtfile, 'From: ', UpFROM );

         writeln ( txtfile, '' : 14, 'Refer#: ', ReferNum );

         write ( txtfile, '  To: ', UpTO );

         write ( txtfile, '' : 15, 'Recvd: ' );

         if Status in ['-', '`', '^', '#'] then

            writeln ( txtfile, 'YES' )

         else

            writeln ( txtfile, 'NO' );

         write ( txtfile, 'Subj: ', Subject );

         writeln ( txtfile, '' : 16, 'Conf: ', '(', (MostSig * 256) + LeastSig, ')' );

         writeln ( txtfile, Seperator );

      end;

end;



procedure ReadMSG ( NumChunks : integer );

var

   Buff : array [1..128] of char;

   J    : integer;

   I    : byte;



begin

   for J := 1 to PRED ( NumChunks ) do begin

      BlockRead ( F, Buff, 1 );

      for I := 1 to 128 do

         if Buff [I] = #$E3 then

            writeln ( txtfile )

         else

            write ( txtfile, Buff [I] );

   end;

end;



procedure ReadMessage ( HDR : MSGDatHdr; RelNum : longint; var Chunks : integer );

begin

   Seek ( F, RelNum - 1 );

   ReadWriteHdr ( HDR );

   Chunks := ArrayToInteger ( HDR.NumChunk, 6 );

   if Chunks <> 0 then begin

      ReadMsg ( Chunks );

      writeln ( txtfile );

   end

   else

      Chunks := 1;

end;



var

   MSGHdr   : MSGDatHdr;

   repordat : boolean;

   ch       : char;

   count    : integer;

   chunks   : integer;

   defsavefile : string;

   fileinfo : searchrec;

   fdt      : longint;

   ps1,ps2  : string [2];

   fileexists,

   overwrite  : boolean;

   response   : char;



   dpath, tpath  : pathstr;

   {epath & dpath are fully qualified pathnames of .dat & .txt files}



   ddir,  tdir   : dirstr;

   dname, tname  : namestr;

   d_ext, t_ext  : extstr;

   txtfileinfo   : searchrec;



begin

   if ( paramcount < 1) or ( paramcount > 2) then showhelp(1);

   ps1 := converttoupper ( paramstr (1));

   if (ps1 = '/H') or (ps1 = '/?') or

      (ps1 = '-H') or (ps1 = '-?') then showhelp(0);



   DefSaveFile := '';

   ps2 := '/A';

   if paramcount > 1 then ps2 := paramstr ( 2 );

   overwrite := (upcase ( ps2[2] ) = 'O');

   dpath := fexpand ( paramstr ( 1 ) );

   fsplit ( dpath, ddir, dname, d_ext );

   { break up path into components }

   findfirst ( dpath, anyfile, fileinfo );

   while doserror = 0 do begin

      fsplit ( fexpand ( fileinfo.name ), tdir, tname, t_ext );

      dpath := ddir + fileinfo.name;

      tpath := ddir + tname + '.TXT';

      Assign ( F, dpath );

      { whatever file .. ( MESSAGES.DAT for .QWK ) }

      Reset ( F, SizeOf ( MsgHdr ) );



      assign ( txtfile, tpath );

{$i-} reset ( txtfile ); {$i+}

      fileexists := (ioresult = 0);



      if fileexists then close ( txtfile );

      if fileexists and ( not overwrite ) then

         append ( txtfile )

      else

         rewrite ( txtfile );



      write ( 'DAT2TXT: ', dpath, ' to: ', tpath );

      Count := 2;                     { start at RECORD #2 }

      while Count < FileSize ( F ) do begin

         ReadMessage ( MSGHdr, Count, Chunks );

         INC ( Count, Chunks );

      end;



      getftime ( F, fdt );

      close ( F ); close ( txtfile ); reset ( txtfile );

      setftime ( txtfile , fdt );

      close ( txtfile );



      writeln ( ', done!' );

      findnext ( fileinfo );

   end;

end.
 

sWhite

Użytkownik
Dołączył
Marzec 14, 2002
Posty
203
zeusiku ja wiem o tym z pgg ale chodzi o to ze tym z progsem ze stronki Ajrona nie da sie zdajsie calego archiwym dat zmienic na txt a tu chyba chodzi o to zeby cala zawartosc pliku dat zmienic na txt i dokonac w nim zmian a pozniej dac to spowrotem na dat, przynajmniej ja do takiego wniosku doszedlem

wiec teraz pozostaje mu znalesc sobie jeszcze progs to zamiany z txt na dat
smile.gif
 

MadHornet

Użytkownik
Dołączył
Czerwiec 7, 2003
Posty
37
dzięki ludziska zaraz się zabieram do sprawdzania tego programa w pascalu.... tylko pascala jeszcze odkopie z dysku
 
Do góry Bottom