0
votes

Chaîne multiligne de la matrice

Je dois créer un format de chaîne pour créer des factures.i avoir un tableau contient des dictionnaires.Je essayé mais ne peut pas créer de chaîne comme celle-ci. La structure de la matrice est comme celle-ci.

[["orderid": 139, "productfullqty": 1, "productprice": 8.0, "productname": Falafel, "id": 544, "producthalfqty": , "productonfourthqty": , "productthirdqty": ], ["orderid": 139, "productfullqty":  12, "productprice":  5.4, "productname":  Tomato, "id": 545, "producthalfqty": , "productonfourthqty": , "productthirdqty": ], ["orderid": 139, "productfullqty":  18, "productprice":  180.0, "productname":  Green Sauce, "id": 546, "producthalfqty": , "productonfourthqty": , "productthirdqty": ], ["orderid": 139, "productfullqty":  1, "productprice":  0.46, "productname":  Onions, "id": 547, "producthalfqty": , "productonfourthqty": , "productthirdqty": ], ["orderid": 139, "productfullqty":  1, "productprice":  8.0, "productname":  Falafel, "id": 548, "producthalfqty": , "productonfourthqty": , "productthirdqty": ], ["orderid": 139, "productfullqty":  12, "productprice":  5.4, "productname":  Tomato, "id": 549, "producthalfqty": , "productonfourthqty": , "productthirdqty": ], ["orderid": 139, "productfullqty":  18, "productprice":  180.0, "productname":  Green Sauce, "id": 550, "producthalfqty": , "productonfourthqty": , "productthirdqty": ], ["orderid": 139, "productfullqty":  1, "productprice":  0.46, "productname":  Onions, "id": 551, "producthalfqty": , "productonfourthqty": , "productthirdqty": ]]


6 commentaires

Pourquoi ne pas convertir cette collection en une matrice d'objets? Il serait plus propre de fonctionner. Une fois que vous avez fait cela ajoute une nouvelle ligne avec votre valeur de format de données et d'espacement via une fonction de boucle ou de carte et plus tard avec ce réseau de chaîne, vous pouvez également utiliser une fonction jointe () pour les collections en passant une nouvelle ligne «\ N» en tant que séparateur.


Pouvez-vous s'il vous plaît élaborer avec l'exemple ou l'URL merci.


Voulez-vous avoir le même alignement? Parce que cela ne fonctionnera que si la police utilisée pour l'imprimer plus tard est monospace. Qu'avez-vous essayé?


@LeMe, merci pour la réponse, nous devons imprimer une facture de commande client via une imprimante Star Micronics. Et j'ai eu une démo du support Star Micronics, en ce type de format de facture de démonstration. Donc, nous envisageons ce format pour imprimer une facture.


La structure de données que vous avez fournie n'est pas valide Swift Syntaxe ou JSON. Plusieurs clés manquent leurs valeurs. Compte tenu de l'entrée, quelle sortie exacte voulez-vous? Pas "comme ça" mais la sortie réelle? Aucun des champs n'est étiqueté "SKU", "Description" ou "Total". Comment la ligne d'impôt est-elle censée être calculée? Quelle est la largeur de cette sortie? Que voulez-vous faire si la description est trop longue? Lorsque vous dites "tu as essayé", quel code avez-vous écrit et de quelle manière cela ne fonctionne-t-il pas?


En première étape, vous devez vous débarrasser de la gamme de dictionnaires et créer une structure qui représente chaque élément de ligne. Cela simplifiera considérablement votre code.


3 Réponses :


0
votes
struct MyOrder {
let id: Int
let orderId: Int
let fullQuantity: Int
let halfQuantity: Int
let quarterQuantity: Int
let price: Double
let name: String

init?(dict: [String:Any]) {
    guard let id = dict["id"] as? Int,
        let name = dict["productname"] as? String
    //..
    //..
    // so on
    else { return nil }
    self.id = id
    self.name = name
}
}

let dataArray = [["id":0,"productname":"Oreo"]]
    let orders = dataArray.compactMap { MyOrder(dict: $0) }
    let myStringRows = orders.map{ "\($0.id)\t\t\($0.name)\t\t" } // format your data here.
    let myFinalTable = myStringRows.joined(separator: "\n")
    print(myFinalTable)

0 commentaires

0
votes

Tout d'abord, assurez-vous que votre JSON est Valide

second, vous pouvez décoder votre JSON en tant que tableau de Dictionnaire avec: xxx


0 commentaires

2
votes

Vous pouvez essayer cela.

let Falafel = "Falafel"
let Tomato = "Tomato"
let GreenSauce = "Green Sauce"
let Onions = "Onions"

let orders = [["orderid": 139, "productfullqty": 1, "productprice": 8.0, "productname": Falafel, "id": 544, "producthalfqty": 1, "productonfourthqty": 1, "productthirdqty": 1], ["orderid": 139, "productfullqty":  12, "productprice":  5.4, "productname":  Tomato, "id": 545, "producthalfqty": 1, "productonfourthqty": 1, "productthirdqty": 1], ["orderid": 139, "productfullqty":  18, "productprice":  180.0, "productname":  GreenSauce, "id": 546, "producthalfqty": 1, "productonfourthqty": 1, "productthirdqty": 1], ["orderid": 139, "productfullqty":  1, "productprice":  0.46, "productname":  Onions, "id": 547, "producthalfqty": 1, "productonfourthqty": 1, "productthirdqty": 1], ["orderid": 139, "productfullqty":  1, "productprice":  8.0, "productname":  Falafel, "id": 548, "producthalfqty": 1, "productonfourthqty": 1, "productthirdqty":1 ], ["orderid": 139, "productfullqty":  12, "productprice":  5.4, "productname":  Tomato, "id": 549, "producthalfqty": 1, "productonfourthqty": 1, "productthirdqty": 1], ["orderid": 139, "productfullqty":  18, "productprice":  180.0, "productname":  GreenSauce, "id": 550, "producthalfqty": 1, "productonfourthqty": 1, "productthirdqty": 1], ["orderid": 139, "productfullqty":  1, "productprice":  0.46, "productname":  Onions, "id": 551, "producthalfqty": 1, "productonfourthqty": 1, "productthirdqty": 1]]

var result = "SKU            Description                        Total\n"
var subTotal: Decimal = 0
orders.forEach { (order) in
    if let sku = order["id"],
        let name = order["productname"],
        let value = order["productprice"],
        let price = value as? NSNumber
    {
        let SKU = "\(sku)".cString(using: .utf8)!
        let NAME = "\(name)".cString(using: .utf8)!
        let PRICE = String(format:"%0.2f", price.doubleValue).cString(using: .utf8)!
        let string = String(format: "%-15s%-32s%8s\n", OpaquePointer(SKU), OpaquePointer(NAME), OpaquePointer(PRICE))
        result.append(string)
        subTotal += price.decimalValue
    }
}
result.append("Subtotal                                         \(subTotal)\n")
result.append("Tax                                                 \(0.00)\n")

print("\(result)")


1 commentaires

Il suffit de corriger votre structure de données. Regardez: "" producthalfqty ":," Produconfourthqty ":," productThirdqty ":]" Vous devez mettre des valeurs ou ne pas ajouter ces clés