créer une longueur fixe fichier plat avec Java
-
18-09-2019 - |
Question
J'ai un processus qui fonctionne actuellement dans une application Delphi que j'ai écrit et je dois le convertir en un processus Java qui fonctionnera sur notre application web. Fondamentalement, notre système financier État (héritage) exige que ce fichier dans une sortie spécifique. Dans Delphi, il est comme ceci:
procedure CreateSHAREJournalFile(AppDate : string; ClassCode : string; BudgetRef : String; AccountNumber : string; FYEStep : integer);
var
GLFileInfo : TStrings;
MPayFormat, HPayFormat, TPayFormat : string;
const
//this is the fixed length format for each item in the file
HeaderFormat = '%-1s%-5s%-10s%-8s%-12s%-10s%-21s%-3s%-71s%-3s%-20s%-1s';
DetailFormat = '%-1s%-5s%-9s%-10s%-10s%-10s%-10s%-8s%-6s%-5s%-5s%-5s%-8s%-25s%-10s%-60s%-28s%-66s%-28s';
begin
try
//get the data from the query
with dmJMS.qryShare do
begin
SQL.Clear;
SQL.Add('SELECT SUM(TOTHRPAY) As HourPay, SUM(TOTMLPAY) As MilePay, SUM(TOTALPAY) AS TotalPay FROM JMPCHECK INNER JOIN JMPMAIN ON JMPCHECK.JURNUM = JMPMAIN.JURNUM WHERE PANELID LIKE ''' + Copy(AppDate, 3, 6) + '%'' ');
if FYEStep > -1 then
SQL.Add('AND WARRANTNO = ' + QUotedStr(IntToStr(FYEStep)));
Active := True;
//assign totals to variables so they can be padded with leading zeros
MPayFormat := FieldByName('MilePay').AsString;
while length(MPayFormat) < 28 do <br>MPayFormat := '0' + MPayFormat;
HPayFormat := FieldByName('HourPay').AsString;
while length(HPayFormat) < 28 do <br>HPayFormat := '0' + HPayFormat;
TPayFormat := Format('%f' ,[(FieldByName('TotalPay').AsCurrency)]);
while length(TPayFormat) < 27 do
TPayFormat := '0' + TPayFormat;
TPayFormat := '-' + TPayFormat;
//create a TStringlist to put each line item into
GLFileInfo := TStringList.Create;
//add header info using HeaderFormat defined above
GLFileInfo.Add(Format(HeaderFormat, ['H', '21801', 'NEXT', FormatDateTime('MMDDYYYY', Today), '', 'ACTUALS', '', 'EXT', '', 'EXT', '', 'N']));
//add detail info using DetailFormat defined above
GLFileInfo.Add(Format(DetailFormat, ['L', '21801', '1', 'ACTUALS', AccountNumber, '', '1414000000', '111500', '', '01200', ClassCode, '', BudgetRef, '', AccountNumber + '0300', '', MPayFormat, '', MPayFormat]));
GLFileInfo.Add(Format(DetailFormat, ['L', '21801', '2', 'ACTUALS', AccountNumber, '', '1414000000', '111500', '', '01200', ClassCode, '', BudgetRef, '', AccountNumber + '0100', '', HPayFormat, '', HPayFormat]));
GLFileInfo.Add(Format(DetailFormat, ['L', '21801', '3', 'ACTUALS', '101900', '', '1414000000', '111500', '', '01200', ClassCode, '', BudgetRef, '', '', '', TPayFormat, '', TPayFormat]));
//save TStringList to text file
GLFileINfo.SaveToFile(ExtractFilePath(Application.ExeName) + 'FileTransfer\GL_' + formatdateTime('mmddyy', Today) + SequenceID + '24400' + '.txt');
end;
finally
GLFileINfo.Free;
end;
end;
Y at-il un équivalent en Java pour l'option Format? Ou le TStringList qui enregistre dans un fichier texte?
Merci pour toute information .... n'a pas fait beaucoup de programmation Java!
Leslie
La solution
Toutes ces opérations sont relativement simples en Java (ou beaucoup d'autres langues, d'ailleurs). Pour votre cas d'utilisation en Java, il est probablement plus facile d'accéder directement à la base de données via JDBC, comme le montre . Après avoir récupéré les données, vous pouvez utiliser ici ).