Ecrit le Mercredi-Jeudi 14/15 par denis Bertin (c) Beelog v0.1.
Cette procedure écrit le fichier résultat en lisant le vocabulaire anglais.

Lecture du fichier : « anglais.htm »
Ecriture fichier : « status_gb.rc.htm »
procedure tdiskwindow.import_rc_status_traduction;

	const _original_ = 'c:\_php\status.rc';

			_php_anglais_ = 'c:\_php\anglais.txt';
			_traduction_ = 'c:\_php\status_gb.rc';

	var char_a_remplacer:char;
		iiimod,Counter,Counter_deux:integer;
		fin,Fin_trad:text; {input traduction}
		out_buffer:tbufstream;
		s,sintrad:string;
		p,q,r,pt,spc:pchar;
		apc,bpc,cpc,dpc:pc255;
		id:longint;
		une_Barre_Tempo:Wmenuk.Barre_Tempo;
		LoopMsg: TMsg;
		col_traduction:Pcollection; {of tindex_pchar}
		id_en_cours:longint;
		pointer_mot_traduit:pindex_pchar;

	(*
	procedure for_indice_id(a:pindex_pchar); far;
		begin
		{
		writeln(a^.pos);
		writeln(a^.apc);
		}
		{une_Barre_Tempo.Augmente;}
		end;
	*)

	function for_existe_traduction(a:pindex_pchar):boolean; far;
		begin
		for_existe_traduction:=False;
		if a=nil then exit;
		for_existe_traduction:=id_en_cours=a^.pos;
		end; {for_existe_traduction}


	begin
	box(0,'tdiskwindow.import_rc_status_traduction');
	box(0,'import_rc_status_traduction begin');

	out_buffer.init(_traduction_,stcreate,2000);

	{//Compter le nombre de mots}
	Counter:=0;
	Assign(Fin, _original_);
	FileMode := 0;
	Reset(Fin);
	While not(eof(fIn)) do
		begin
		inc(counter);
		readln(fin,s); {Lire une ligne pour arrivé à la fin du fichier.}
		end;
	Close(Fin);

	{$ifdef debug}
		inttopchar(counter,apc); strcat(apc,'c:\_php\status.rc'); box(0,apc);
		box(0,'Lecture c:\_php\anglais.txt pour count deux');
	{$endif debug}

	assign(Fin_trad,_php_anglais_);
	FileMode := 0;
	Reset(Fin_Trad);
	Counter_deux:=0;
	while not eof(fin_trad) do
		begin
		readln(fin_trad,s);
		inc(counter_deux);
		end;

	{$ifdef debug}
		inttopchar(counter_deux,bpc); strcat(strcopy(apc,'c:\_php\anglais.txt = '),bpc); box(0,apc);
	{$endif debug}

	col_traduction:=new(Pcollection,init(counter_deux,500));

	{$ifdef debug}
		box(0,'Lecture c:\_php\insertion dans la col');
	{$endif debug}

	assign(Fin_trad,_php_anglais_);
	FileMode := 0;
	Reset(Fin_Trad);
	Counter:=0;
	une_Barre_Tempo._init(counter_deux,wmenuk.KBT_exportation,nil);
	while not eof(fin_trad) do
		begin
		readln(fin_trad,s);
		strpcopy(apc,s);
		col_traduction^.insert(new(pindex_pchar,init(counter,apc)));

		if PeekMessage(LoopMsg, 0, 0, 0, pm_Remove) then
			begin
			TranslateMessage(LoopMsg);
			DispatchMessage(LoopMsg);
			end;
		une_Barre_Tempo.augmente;
		end;
	close(Fin_trad);
	une_Barre_Tempo.done;

	{$ifdef debug}
		inttopchar(col_traduction^.count,apc);
		strcopy(bpc,'col_traduction^.count=');
		strcat(bpc,apc);
		box(0,apc);
	{$endif debug}

	{col_traduction^.foreach(@for_indice_id);}
	une_Barre_Tempo._init(counter,wmenuk.KBT_exportation,nil);
	Assign(Fin,_original_);
	FileMode := 0;
	Reset(Fin);
	iiimod:=0;
	While not(eof(fIn)) do
		begin
		inc(iiimod);
		if iiimod mod 10=0 then
			begin
			if PeekMessage(LoopMsg, 0, 0, 0, pm_Remove) then
				begin
				TranslateMessage(LoopMsg);
				DispatchMessage(LoopMsg);
				end;
			end;

		{continue, while not eof()}
		une_Barre_Tempo.Augmente;
		readln(fin,s);
		{convertir en string}
		strpcopy(apc,s);
		{trouver un guillemet}
		p:=strpos(apc,'"');
		{trouver un double guillemet}
		if strpos(apc,'""')<>nil then
			p:=nil; {faire comme si, c'était une ligne sans '"'}
		if p=nil then
			begin {écrire une chaine identique}
			strcat(apc,CRLF);
			out_buffer.write(apc,strlen(apc));
			{writeln(s);}
			end  {écrire une chaine identique}
		else
			begin {Paix trouver, Ecrire la correspondance}
			q:=strpos(apc,',');
			id_en_cours:=-1;
			{recherche de l'identifiant}
			if q<>nil then
				begin
				q^:=#0;
				r:=pchar(@apc);
				inc(r);
				if wutil.Is_Pchar_numerique(r) then
					begin {identifiant numérique trouver}
					id_en_cours:=wutil.PChartolongint(r);
					end;  {identifiant numérique trouver}
				q^:=',';
				end;
			inc(p); {déplacer le pointer sur le guillemet trouvé}
			char_a_remplacer:=p^;
			p^:=#0;
			{rechercher la traduction}
			pointer_mot_traduit:=col_traduction^.firstthat(@for_existe_traduction);
			if pointer_mot_traduit<>nil then
				begin {le remplacer}
				{writeln(pointer_mot_traduit^.apc);}
				strcat(strcat(strcat(p,pointer_mot_traduit^.apc),'"'),CRLF);
				out_buffer.write(apc,strlen(apc));
				end   {le remplacer}
			else
				begin {écrire la ligne telle quelle pas de traduction}
				p^:=char_a_remplacer;
				strcat(apc,CRLF);
				out_buffer.write(apc,strlen(apc));
				end;  {écrire la ligne telle quelle pas de traduction}
			end;  {Paix trouver, Ecrire la correspondance}
		end;
	une_Barre_Tempo.Done;
	Close(Fin);
	out_buffer.done;
	dispose(col_traduction,done); {//zoop}
	box(hwindow,'import_rc_status_traduction end');
	end; {tdiskwindow.import_rc_status_traduction}
{$endif denis}