我目前只是试图让.csv文件中最后一列的输出正常工作。我需要它转换为货币。我不确定我是否使用(i == 6)整列(如果这是一个有用的东西)或者我必须这样做(i == 13 || i == 20 || i == 27)等每个需要转换为货币的价值。
我正在努力实现的目标:
单击“加载库存”按钮时,将读取库存记录 从使用“打开文件对话框”控件的文本文件中,从文件读取的行被标记为字段值,进行解析(根据需要),然后加载到列表框和类实例列表中。除了输入文件中的所有字段值之外,ListBox(和类实例列表)还应包含QtyHand和Sales的列。 String.Format()或PadRight()方法可用于格式化列表框内容,以便在使用等宽字体时对齐列中的所有值。
.csv文件的前两行是:
published_at
非常感谢任何有关排序的帮助。
ALTER TABLE `news_article_counts` CHANGE `published_at` `published_at` TIMESTAMP NOT NULL;
答案 0 :(得分:0)
嗯,这是没有其他细节的快速解决方案,但简而言之,您需要存储新格式化的项目,我希望这很清楚,你可以继续。更新为更好的格式化代码。
static void Main(string[] args)
{
List<string> outputList = new List<string>();
string[] list = new string[] { "85 - 0521031, Shampoo, 35, 9, 0, 0, 2.89", "86 - 0521031, Guitar, 35, 9, 0, 0, 9.89" };
for(var i=0; i<list.Length; i++)
{
var listItem = list[i].Split(',');
var outputListItem = "";
for (var j=0; j<listItem.Length; j++)
{
if(j == 6)
{
double price = double.Parse(listItem[j]);
listItem[j] = String.Format("{0:C2}", price).PadRight(20, ' '); ;
}
outputListItem = string.Join(" ", listItem);
}
Console.WriteLine(outputListItem);
outputList.Add(outputListItem);
}
Console.ReadLine();
}
答案 1 :(得分:0)
我建议使这个面向对象,这看起来像库存。所以第一步是制作库存类。在Inventory类中,将使用字符串作为加载库存的文件名(这可能需要根据您的实际数据类型和错误处理要求进行修改)。
public class Inventory
{
public string Id { get; set; }
public string ItemName { get; set; }
public int StartingQty { get; set; }
public int QtyMinRestck { get; set; }
public int QtySold { get; set; }
public int QtyRStcked { get; set; }
public decimal UnitPrice { get; set; }
public Inventory()
{
}
//this overrides the default .ToString() method to provide
//columnar output and formats the UnitPrice to currrency
//this requires the following: using System.Globalization;
public override string ToString()
{
return String.Format("{0}{1}{2}{3}{4}{5}{6}"
, Id.PadRight(15, ' ')
, ItemName.PadRight(30, ' ')
, StartingQty.ToString().PadLeft(10, ' ')
, QtyMinRestck.ToString().PadLeft(10, ' ')
, QtySold.ToString().PadLeft(10, ' ')
, QtyRStcked.ToString().PadLeft(10, ' ')
, UnitPrice.ToString("C", CultureInfo.CurrentCulture).PadLeft(10, ' '));
}
//this loads a collection of inventory objects from a file
//it would ignore any lines with errors
public IEnumerable<Inventory> Load(string InventoryFileName)
{
var inventories = new List<Inventory>();
using (var sr = new StreamReader(InventoryFileName))
{
sr.ReadLine(); //skip the first line
while (!sr.EndOfStream)
{
try
{
var fields = sr.ReadLine().Split(',');
inventories.Add(new Inventory
{
Id = fields[0]
,
ItemName = fields[1]
,
StartingQty = Int32.Parse(fields[2])
,
QtyMinRestck = Int32.Parse(fields[3])
,
QtySold = Int32.Parse(fields[4])
,
QtyRStcked = Int32.Parse(fields[5])
,
UnitPrice = Decimal.Parse(fields[6])
});
}
catch
{
//handle error here
}
}
}
return inventories;
}
}
现在我们有了这个课程,您可以轻松地调用它并从文件中获取库存:
inventoryListBox.Items.Clear(); //清除列表框项目
if (ipFile.ShowDialog() == DialogResult.OK) //show dialog box
{
Inventory inventory = new Inventory();
var inventories = inventory.Load(ipFile.FileName);
//sets the datasource of the list box to the collection of inventory
//by default it calls the ToString() method which which overrode
//to provide columar output
inventoryListBox.DataSource = inventories;
}
这是一个非常基本的实现,但它应该使将来更容易维护。您还可以使用“库存”作为列表框的数据源。