2015-05-28 2 views
0

я не могу больше найти на этом онлайн :(C# текст Split массив в массив к югу

Для моего курса я должен получить текст из файла grocery.txt и вывода счета-фактуры.

текстовый файл выглядит следующим образом:

regular,bread,2.00,2 
regular,milk,2.00,3 
regular,cereal,4.00,1 
fresh,rump steak,11.99,0.8 
fresh,apple,4.60,1.00 
fresh,cucumber,2.20,0.936 
regular,cream,2.20,1 
regular,mustard,3.30,1 
fresh,carrots,1.79,1.5 
regular,tomato sauce,2.95,1 
regular,salt,2.80,1 
fresh,bananas,4.00,1.2 

в настоящее время я использую этот метод, чтобы получить текст:

string[] groceryItemsArray = System.IO.File.ReadAllLines(@"C:\C\groceries.txt"); 

Я get - это массив, который хранит всю строку (например, «свежий, бананы, 4.00.1.2»). Я понятия не имею, как разбить массив на вспомогательные массивы или даже самый лучший способ сделать это. К сожалению, эта задача курса слишком продвинута для небольшого материала, который мы преподавали, и времени, которое у нас есть для этого. Я уже потратил около 6 часов на просмотр видео и не очень далеко изучил продвинутый материал.

Это то, что я пытаюсь выполнить.

A. Класс, названный grocerrItem. Этот класс имеет свойства: имя и цена этот класс должен иметь 2 конструктора

A. Подкласс этого приобретаемого предмета. этот класс имеет целочисленное свойство 'quantity' Один из его методов findCost, вычисляет стоимость предмета, в том числе 10% GST. Формула для этого - цена * количество * 1.1

C. Подкласс этого класса (купленныйItem), freshItem имеет вес имущества, двойной тип. Метод findCost здесь использует формулу: wieght * price, так как он не подлежит GST.

Groceries.txt содержит следующую информацию:

типа (регулярный или свежий), наименование, цена, количество/вес - в зависимости от того регулярно или в свежем виде.

** Счета-фактуры должны быть представлены как коллекция продуктовых товаров (родительский класс). Это можно сделать с использованием любой структуры контейнера, то есть массива, списка или коллекции. вы будете использовать итерацию

+1

Возможный дубликат [CSV File Imports in .Net] (http://stackoverflow.com/questions/1898/csv-file-imports-in-net) – Steve

+0

Просто чтобы подтвердить, пытаетесь ли вы разбить его на отдельные строки? Или вы пытаетесь получить «вспомогательный массив» для каждой строки? Что вы подразумеваете под «вспомогательными массивами»? Существует множество способов получить либо один из них очень легко, но нам нужна дополнительная информация. –

+2

Посмотрите string.Split() –

ответ

1

Я действительно не понимаю, что вы пытаетесь вывести, но вот некоторые основные вещи, которые я понял по вашему вопросу:

(код не тестировался)

Я создал родительский класс:

class GroceryItem 
{ 
    public string ItemName {get;set;} 
    public decimal Price {get;set;} 

    public GroceryItem() { } 
} 

И создает дочерний класс:

class PurchasedItem : GroceryItem 
{ 
    public int Quantity { get;set; } 
    public decimal Cost { get;set; } 

    public PurchasedItem(string[] item) 
    { 
     ItemName = item[1]; 
     Price = decimal.Parse(item[2]); 
     Quantity = int.Parse(item[3]); 
     FindCost(); 
    } 

    private void FindCost() 
    { 
     Cost = Price * Quantity * 1.1; 
    } 
} 

Используя свой вход, чтобы получить все groceryItems, вы можете перемещаться с помощью foreach и собрать список купленных элементов.

Main() 
{ 
    string[] groceryItems = System.IO.File.ReadAllLines(@"C:\C\groceries.txt"); 

    var purchasedItems = new List<PurchasedItem>(); 
    foreach (var item in groceryItems) 
    { 
     string[] line = item.Split(','); 
     purchasedItems.Add(new PurchasedItem(line)); 
    } 
} 

Ну, если вы не поняли эту основную концепцию программирования, вам лучше начать на этом link.

+0

Да, я немного потерял, я думаю, было много материала. – RiCHiE

+0

Если вы не поняли пример, который я опубликовал. Я рекомендую вам начать со ссылки, которую я включил в свой ответ, удачи! :) – jomsk1e

+0

Да, я смотрю, я не понимаю, почему так сложно превратить массив в многомерный массив, который имеет 4 значения разделения, похожие на то, что опубликовал Sachin. Возможно, мое мышление о других языках полностью отличается от C# – RiCHiE

2

Вы можете просто использовать String.Split, который возвращает вам необходимый массив.

public static void Main() 
{ 
    string[] groceryItemsArray = System.IO.File.ReadAllLines(@"C:\C\groceries.txt"); 

    // now split each line content with comma. It'll return you an array (sub-array) 
    foreach (var line in groceryItemsArray) 
    { 
     string[] itemsInLine = line.Split(','); 

     // Do whatevery you want to do with this. 
     // e.g. for 1st line itemsInLine array will contains 4 items 
     // "regular","bread","2.00", "2" 
    } 
} 
+6

Объясните, почему это работает. –

+0

Интересно, имеет смысл. но когда я пытаюсь записать itemsInLine, я получаю сообщение об ошибке «Имя itemsInLine не существует в этом контексте». Не могли бы вы немного объяснить, как это работает? – RiCHiE

+0

@RiCHiE, где вы обращаетесь к этой переменной 'itemsInLine', а также дайте мне знать, что на самом деле вы хотите сделать в конце, чтобы я мог объяснить, как это достичь. – Sachin

2

Вы можете использовать этот код (я не уверен, что именно вы ищете):

/// It's return all text as a single list 
var groceryItemsArray = System.IO.File.ReadAllLines(@"C:\C\groceries.txt") 
     .SelectMany(x => x.Split(new char[]{','} , StringSplitOptions.RemoveEmptyEntries)).ToList() ; 

Или, если хотите, чтобы вернуться в список Ребенок может использовать этот код:

var groceryItemsArray = System.IO.File.ReadAllLines(@"C:\C\groceries.txt").Select(x => 
      new { Child = x.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries) }).ToList(); 
+0

. Хотите разбить массив на каждый элемент в каждой строке, но не потерять каждую строку в качестве элемента. – RiCHiE

+0

Lambdas может быть слишком продвинутым для него. Ему нужно понять, что они собой представляют, что они делают и как их следует использовать ... не только данный код. Просто мысль. –

+0

Да, я так думаю. – RiCHiE

Смежные вопросы