Replace number with name of months - jasper-reports

I have sort of data which contains number.
1,2,3,4,5,6,7,8,9,10,11,12, to represent months.
I want to change it so when I preview the report it shows
January
February
March
April
May
June
July
August
November
December
I've tried using replace()
.replace("1", "January")
When I run it, it doesn't work
Any suggestion?

You can use Text Field Expression, Replace $V{Month} with your field Name
<textfieldexpression class="java.lang.String">
(
$V{Month}.equals("1") ? "January" :
$V{Month}.equals("2") ? "February" :
$V{Month}.equals("3") ? "March" :
$V{Month}.equals("4") ? "April" :
$V{Month}.equals("5") ? "May" :
$V{Month}.equals("6") ? "June" :
$V{Month}.equals("7") ? "July" :
$V{Month}.equals("8") ? "August" :
$V{Month}.equals("9") ? "September" :
$V{Month}.equals("10") ? "October" :
$V{Month}.equals("11") ? "November" : "December"
)
</textfieldexpression>

This should solve your problem. What I have done here is split the source string into an ArrayList of String and then used switch case to concatenate the names of corresponding months to a new string that is shown as the output.
import java.util.*;
class abc
{
public static void main (String[] args)
{
String str = "1,2,3,4,5,6,7,8,9,10,11,12,";
String res = "";
List<String> list = new ArrayList<String>(Arrays.asList(str.split(",")));
for (String s : list)
{
switch (s)
{
case "1":
res += "January\n";
break;
case "2":
res += "February\n";
break;
case "3":
res += "March\n";
break;
case "4":
res += "April\n";
break;
case "5":
res += "May\n";
break;
case "6":
res += "June\n";
break;
case "7":
res += "July\n";
break;
case "8":
res += "August\n";
break;
case "9":
res += "September\n";
break;
case "10":
res += "October\n";
break;
case "11":
res += "November\n";
break;
case "12":
res += "December\n";
break;
default:
System.err.println("Invalid output");
}
}
System.out.println(res);
}
}

Related

ASP.NET Core MVC : GET details using view model not working

I am having a problem using a view model to view get the details of an item selected in the view. I am loading a result into my index view as follows
public async Task<IActionResult> Index(string sortOrder, string currentFilter, string searchString, int? page)
{
ViewBag.CurrentSort = sortOrder;
ViewBag.ConOrgSortParm = String.IsNullOrEmpty(sortOrder) ? "Client_desc" : "Client";
ViewBag.AssignedSortParm = String.IsNullOrEmpty(sortOrder) ? "Assigned_desc" : "Assigned";
ViewBag.ExpiresSortParm = String.IsNullOrEmpty(sortOrder) ? "Expires_desc" : "Expires";
ViewBag.LastActiveSortParm = String.IsNullOrEmpty(sortOrder) ? "LastActive_desc" : "LastActive";
ViewBag.IDSortParm = String.IsNullOrEmpty(sortOrder) ? "Id_desc" : "";
if (searchString != null)
{
page = 1;
}
else
{
searchString = currentFilter;
}
ViewBag.CurrentFilter = searchString;
var results = (from node in _context.Nodes
join bnbridge in _context.BundleNodes on node.Id equals bnbridge.NodeId into NodeBundleIDGroup
from ax in NodeBundleIDGroup.DefaultIfEmpty()
join bundle in _context.Bundles on ax.BundleId equals bundle.Id into NodeBundleGroup
from bx in NodeBundleGroup.DefaultIfEmpty()
join agreement in _context.Agreements on bx.AgreementId equals agreement.Id into agGroup
from cx in agGroup.DefaultIfEmpty()
join org in _context.Organizations on cx.OrgId equals org.Id into oGroup
from ex in oGroup.DefaultIfEmpty()
join conorg in _context.Organizations on node.OrgId equals conorg.Id into tGroup
from fx in tGroup.DefaultIfEmpty()
select new NodeIndexViewModel
{
Id = node.Id,
Name = node.Name,
AssignedOrg = fx.ShortName,
ContractingOrg = ex.ShortName,
Expiry = bx.EndUtc,
LastActive = node.ActiveDate,
NodeType = bx.NodeTypeID
});
if (!String.IsNullOrEmpty(searchString))
{
results = results.Where(s => s.AssignedOrg.Contains(searchString)
|| s.Id.ToString().StartsWith(searchString));
}
switch (sortOrder)
{
case "Client_desc":
results = results.OrderByDescending(s => s.ContractingOrg);
break;
case "Client":
results = results.OrderBy(s => s.ContractingOrg);
break;
case "Assigned":
results = results.OrderBy(s => s.AssignedOrg);
break;
case "Assigned_desc":
results = results.OrderByDescending(s => s.AssignedOrg);
break;
case "Expires":
results = results.OrderBy(s => s.Expiry);
break;
case "Expires_desc":
results = results.OrderByDescending(s => s.Expiry);
break;
case "LastActive":
results = results.OrderBy(s => s.LastActive);
break;
case "LastActive_desc":
results = results.OrderByDescending(s => s.LastActive);
break;
case "Id_desc":
results = results.OrderByDescending(s => s.Id);
break;
default:
results = results.OrderBy(s => s.Id);
break;
};
int pageSize = 10;
int pageNumber = (page ?? 1);
return View(await results.ToPagedListAsync(pageNumber, pageSize));
}
This is working as expected. The problem comes when I want to access the Details of one of the listed results.
I have tried the following in the controller:
public async Task<IActionResult> Details(int? id)
{
if (id == null || _context.NodeIndexViewModel == null)
{
return NotFound();
}
var nodeIndexViewModel = await _context.NodeIndexViewModel
.FirstOrDefaultAsync(m => m.Id == id);
if (nodeIndexViewModel == null)
{
return NotFound();
}
return View(nodeIndexViewModel);
}
I get an error
PostgresException: 42P01: relation "NodeIndexViewModel" does not exist
Can't answer the question because I don't know what the problem was but I rescaffolded the database and it's working now.

How to get ordinal Numbers in flutter

I tried getting some help from stack and l can across this Python code
I would like to know how to convert this into dart and use it to get ordinal numbers
ordinal = lambda n: "%d%s" % (n,"tsnrhtdd"[(n//10%10!=1)*(n%10<4)*n%10::4])
Try with this
void main() {
for(int i =1; i<=100;i++){
print("$i${ordinal(i)}");
}
}
String ordinal(int number) {
if(!(number >= 1 && number <= 100)) {//here you change the range
throw Exception('Invalid number');
}
if(number >= 11 && number <= 13) {
return 'th';
}
switch(number % 10) {
case 1: return 'st';
case 2: return 'nd';
case 3: return 'rd';
default: return 'th';
}
}
output:
1st
2nd
3rd
4th
5th
6th
7th
8th
9th
10th
..................
Resuable version of accepted answer.
main() {
print(toOrdinal(3));
// -> 3rd
print(ordinalGenerator(end: 1000));
// -> [1st, 2nd, 3rd, 4th,..., 1000th]
print(ordinalGenerator(start: 7, end: 14));
// -> [7th, 8th, 9th, 10th, 11st, 12nd, 13rd, 14th]
}
List ordinalGenerator({int start = 1,required int end}) {
if (start < 1) throw Exception('Start Number Can\' be less than 1');
if (start > end) throw Exception('Invalid Range');
return List.generate(
end - (start == 1 ? 0 : start - 1),
(index) => toOrdinal(index + start),
);
}
String toOrdinal(int number) {
if (number < 0) throw Exception('Invalid Number');
switch (number % 10) {
case 1:
return '${number}st';
case 2:
return '${number}nd';
case 3:
return '${number}rd';
default:
return '${number}th';
}
}
Using extensions, the code below can be used with any int type.
Since ordinals are based on the last figure of a digit; this int extension takes the integer value and converts it to string
Next, it gets the last index of said string and uses that to determine the ordinal.
extension NumberParsing on int {
String toOrdinalString() {
if ((this < 0)) {
//here you change the range
throw Exception('Invalid number: Number must be a positive number');
}
if (this == 0) {
return '0';
}
String stringValue = toString();
switch (stringValue[stringValue.length - 1]) {
case '1':
return stringValue + 'st';
case '2':
return stringValue + 'nd';
case '3':
return stringValue + 'rd';
default:
return stringValue + 'th';
}
}
}
// Usage:
int someIntValue = 25;
someIntValue.toOrdinalString();
//Output:
25th
// Generate Ordinals from 1 to 100
for(int i =1; i<=100;i++){
print(i.toOrdinalString());
}

How can I convert english numbers into another language numbers (I am using Bengali language) in Flutter?

I am getting english numbers (e.g. 123) as integer, now I want to show it in another language form (e.g. ১২৩).
I used a function and it also worked. But, it doesn't work in same stateful class more than once.
It worked for the first Text widget but not for the second one
Column(
children<Widget>:[
Text(
"${convertNumber(123)}"
),
Text(
"${convertNumber(5630)}"
)
]
)
String convertNumber(int eng){
String bengali = '';
for(int i = 0; i < eng.toString().length; i ++){
setState(() {
switch(eng.toString()[i]){
case '1':
bengali = bengali + '১';
break;
case '2':
bengali = bengali + '২';
break;
case '3':
bengali = bengali + '৩';
break;
case '4':
bengali = bengali + '৪';
break;
case '5':
bengali = bengali + '৫';
break;
case '6':
bengali = bengali + '৬';
break;
case '7':
bengali = bengali + '৭';
break;
case '8':
bengali = bengali + '৮';
break;
case '9':
bengali = bengali + '৯';
break;
default:
bengali = bengali + '0';
}
});
}
return bengali;
}
While I am using it for other numbers in the same stateful class, it doesn't work. And error was :
setState() or markNeedsBuild() called during build
This LowerHalf widget cannot be marked as needing to build because the framework is already in the process of building widgets. A widget can be marked as needing to be built during the build phase only if one of its ancestors is currently building. This exception is allowed because the framework builds parent widgets before children, which means a dirty descendant will always be built. Otherwise, the framework might not visit this widget during this build phase. The widget on which setState() or markNeedsBuild() was called was: LowerHalf
Do not call setState inside your convert function, just use your function to get a value.
Widgets rebuild after you call setState function. In your case, build calls setState that triggers build again.
Create new function and return string after converting it.
Below function is for converting number from English to Hindi or Gujarati based on users selected language for application.
translateMobileNumber(String mobileNumber) {
var mobileNumberTrim = mobileNumber.toString().trim();
var translatedNumber = '';
var currentLan = 'gu';
switch (Get.locale.toString().substring(0, 2)) {
case 'gu':
currentLan = 'gu';
break;
case 'hi':
currentLan = 'hi';
break;
case 'en':
currentLan = 'en';
break;
default:
currentLan = 'en';
break;
}
if (currentLan == 'en') {
return mobileNumberTrim;
}
for (int i = 0; i < mobileNumberTrim.length; i++) {
switch (mobileNumberTrim[i]) {
case '0':
translatedNumber =
currentLan == 'gu' ? '$translatedNumber૦' : '$translatedNumber૦';
break;
case '1':
translatedNumber =
currentLan == 'gu' ? '$translatedNumber૧' : '$translatedNumber१';
break;
case '2':
translatedNumber =
currentLan == 'gu' ? '$translatedNumber૨' : '$translatedNumber२';
break;
case '3':
translatedNumber =
currentLan == 'gu' ? '$translatedNumber૩' : '$translatedNumber३';
break;
case '4':
translatedNumber =
currentLan == 'gu' ? '$translatedNumber૪' : '$translatedNumber४';
break;
case '5':
translatedNumber =
currentLan == 'gu' ? '$translatedNumber૫' : '$translatedNumber५';
break;
case '6':
translatedNumber =
currentLan == 'gu' ? '$translatedNumber૬' : '$translatedNumber६';
break;
case '7':
translatedNumber =
currentLan == 'gu' ? '$translatedNumber૭' : '$translatedNumber७';
break;
case '8':
translatedNumber =
currentLan == 'gu' ? '$translatedNumber૮' : '$translatedNumber८';
break;
case '9':
translatedNumber =
currentLan == 'gu' ? '$translatedNumber૯' : '$translatedNumber९';
break;
}
}
return translatedNumber;
}

Getting Error: return statement is missing in switch statement

I thought my switch case was written correctly but I got an error:
return statement is missing in the last bracket.
Please find below my code:
public string getUrl(string code )
{
switch (code)
{
case "1":
return "#";
case "2":
return "#";
case "3":
return "#";
case "4":
return "#";
case "5":
return "#";
case "6":
return "#";
case "7":
return "#";
}
}
Thanks in advance
What you are missing is a default case. What string should this function return if none of the cases you mentioned occur.
e.g. I pass "unknown" to this method getUrl.
So just add a default case and things should work fine.
The code should look something like
public string getUrl(string code )
{
switch (code)
{
case "1":
return "#";
case "2":
return "#";
case "3":
return "#";
case "4":
return "#";
case "5":
return "#";
case "6":
return "#";
case "7":
return "#";
default:
return "Unknown case occured!";
}
}

Return 1st from 1, 2nd from 2, ..., 11th from 11,

Is there a Objective-c function to return a NSString * from a NSUInteger, i.e.:
1 -> 1st
2 -> 2nd
...
10 -> 10th
21 -> 21st
...
31 -> 31st
for the range from 1 to 31. Thanks!
- (NSString *)stringFromInt:(int)num {
NSString stringAddition;
if (num%100 >= 11 && num%100 <= 13) {
stringAddition = #"th";
}
else {
switch (num % 10) {
case 1: stringAddition = #"st"; break;
case 2: stringAddition = #"nd"; break;
case 3: stringAddition = #"rd"; break;
default: stringAddition = #"th"; break;
}
}
return [NSString stringWithFormat:#"%i%#", num, stringAddition];
}
EDIT:
Fixed the 11, 12, 13 issue.