Avatar billede f2f4 Novice
30. august 2007 - 12:51 Der er 9 kommentarer og
1 løsning

WriteLn til fil problemer

Jeg har i Delphi7 lavet et meget lille 'Console Application' der sammenligner 2 tekstfiler og retunere eventuelle forskelde i en 3. tekstfil således:

str1:= '< ' + Pad(IntToStr(lnr), 10) + ': ' + str1;
str2:= '> ' + Pad(IntToStr(lnr), 10) + ': ' + str2;
WriteLn(fil3, str1);
WriteLn(fil3, str2);
WriteLn(fil3, '----');

I visse situationer kommer hele strengen (str1 el. str2) ikke ud i fil3, somom den stopper midt i en linie! Hvorfor?

Jeg har lagt hele det lille project her:
http://www.mortenrasmussen.net/diffsource.zip
(ovenstående er omkring linie 110 i mradiff.dpr)

Til test kan denne program parameter bruges:
'1.xml 2.xml /t /l:afdile.txt'
(ved dette eksempel kommer '<id>11</id>' fra 2.xml af en eller anden grund ikke med i 'fil3' ... meget mystisk!?)

Tak hvis nogle kan hjælpe ...
Avatar billede f2f4 Novice
30. august 2007 - 12:53 #1
Tilføjelse:
Det er mulidvis et 'filtype' problem, men løsningen ønskes lavet i Delphi koden og ikke i de to filer der skal sammenlignes!
Avatar billede spil2vind Nybegynder
30. august 2007 - 13:10 #2
Hej, jeg sidder med en Delphi 10, kan du fortælle hvad disse units gør RegIni, SysRegi, TpString
Avatar billede f2f4 Novice
30. august 2007 - 13:45 #3
Hej, tror bare de kan fjernes ... stammer vist fra en ældre udgave
Avatar billede spil2vind Nybegynder
30. august 2007 - 13:46 #4
Har jeg prøvet, den klager over Pad(
Avatar billede f2f4 Novice
30. august 2007 - 13:46 #5
TpString indeholder 'Pad' der bare gør en streng til en bestemt længde på ex 10 tegn
Avatar billede f2f4 Novice
30. august 2007 - 13:48 #6
dvs. ex. linie 100 bliver til '100 ' og linie 1 bliver til '1  '
Avatar billede spil2vind Nybegynder
30. august 2007 - 13:48 #7
Skal jeg skrive koden eller giver du mig den lige
Avatar billede f2f4 Novice
30. august 2007 - 13:54 #8
function PadChL(const S : AnsiString; C : AnsiChar; Len : Cardinal) : AnsiString;
  {-Pad a string on the right with a specified character.}
begin
  if Length(S) >= LongInt(Len) then                                   
    Result := S
  else begin
    SetLength(Result, Len);
    { copy current contents (if any) of S to Result }
    if (Length(S) > 0) then                                              {!!.01}
      Move(S[1], Result[1], Length(S));

    { add pad chars }
    FillChar(Result[Succ(Length(S))], LongInt(Len)-Length(S), C);
  end;
end;

function Pad(const S : AnsiString; Len : Cardinal) : AnsiString;
  {-Pad a string on the right with spaces.}
begin
  Result := PadChL(S, ' ', Len);
end;
Avatar billede spil2vind Nybegynder
30. august 2007 - 14:15 #9
Hej, du mangler en closefile

  Closefile( Fil3);

  if not(useLogfile) and bDiff and (LogFile <> '') then begin
    AssignFile(fil3, LogFile);
    rewrite(fil3);
    close(fil3);
  end;

  if MyIgnoreList <> nil then begin
    MyIgnoreList.Free;
  end;
Avatar billede f2f4 Novice
30. august 2007 - 14:33 #10
Jah ... doo ... nå men mange tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester