إنشاء ملف ثابت طول ثابت مع جافا
-
18-09-2019 - |
سؤال
لدي عملية تعمل حاليا في تطبيق Delphi كتبت وأحتاج إلى تحويله إلى عملية Java التي سيتم تشغيلها على تطبيق الويب الخاص بنا. أساسا النظام لدينا النظام المالي (الإرث) يتطلب هذا الملف في إخراج معين. في دلفي هو مثل هذا:
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;
هل هناك ما يعادله في جافا لخيار التنسيق؟ أو tstringlist التي توفر إلى ملف نصي؟
شكرا لأي معلومات .... لم تقم بالكثير من برمجة Java!
ليزلي
المحلول
هذه جميع عمليات بسيطة نسبيا في جافا (أو الكثير من اللغات الأخرى، لهذه المسألة). لحالة استخدامك في Java، ربما من الأسهل الوصول إلى قاعدة البيانات مباشرة عبر JDBC، كما هو موضح هنا. وبعد بعد استرداد البيانات، يمكنك استخدام string.format (...) لتنسيق البيانات بالطريقة التي تحتاجها، يمكنك بعد ذلك كتابة ذلك إلى ملف (كما هو موضح هنا).
لا تنتمي إلى StackOverflow