lineno++;
string line = fgets(f);
- return String::parse_csv(line);
+ string[*] elts = String::parse_csv(line);
+ for (int i = 0; i < dim(elts); i++)
+ if (String::length(elts[i]) > 0 && elts[i][0] == '"')
+ elts[i] = String::dequote(elts[i]);
+ return elts;
}
string[*] header;
"device",
"value",
"refdes",
+ "loadstatus"
};
bool has_header_member(string member) {
return entry["vendor_part_number"];
}
+string quoted(string v)
+{
+ if (String::index(v, "\"") >= 0 || String::index(v, ",") >= 0) {
+ if (String::index(v, "\"") >= 0) {
+ string ret = "\"";
+ for (int i = 0; i < String::length(v); i++) {
+ if (v[i] == '"')
+ ret = ret + "\"";
+ ret = ret + String::new(v[i]);
+ }
+ ret = ret + "\"";
+ return ret;
+ } else {
+ return "\"" + v + "\"";
+ }
+ } else {
+ return v;
+ }
+}
+
void process_seeed(string[string] entry)
{
+ if (entry["loadstatus"] == "noload")
+ return;
+
+ static bool start = true;
+ if (start) {
+ printf("Part/Designator,Manufacturer Part Number/Seeed SKU, Quantity\n");
+ start = false;
+ }
- if (entry["loadstatus"] != "smt")
+ string[*] refdes = String::wordsplit(entry["refdes"], " \t");
+ if (dim(refdes) > 1)
+ printf ("\"");
+ for (int i = 0; i < dim(refdes); i++) {
+ printf("%s", refdes[i]);
+ if (i < dim(refdes) - 1)
+ printf (",");
+ }
+ if (dim(refdes) > 1)
+ printf ("\"");
+ printf(",%s,%s\n", quoted(entry["mfg_part_number"]), entry["quantity"]);
+}
+
+void process_goldphoenix(string[string] entry)
+{
+ int units = 1000;
+
+ if (entry["loadstatus"] == "noload")
return;
+ static int item = 1;
static bool start = true;
if (start) {
- printf("Part/Designator,Manufacturer Part Number/Seeed SKU, Quantity");
+ printf("#Item,Description,Designator,Package,Manufacturer,Manufacturer Part Number#,Supplier,Supplier Part #,QTY/BOARD,Order QTY,Unit Price, Subtotal \n");
start = false;
}
string[*] refdes = String::wordsplit(entry["refdes"], " \t");
+ printf("%d,", item);
+
+ /* description */
+ printf("%s %s,",
+ quoted(entry["device"]),
+ quoted(entry["value"]));
+
+ /* designators */
if (dim(refdes) > 1)
printf ("\"");
for (int i = 0; i < dim(refdes); i++) {
}
if (dim(refdes) > 1)
printf ("\"");
- printf(",%s,%s\n", entry["mfg_part_number"], entry["quantity"]);
+
+ /* rest */
+ printf(",%s,%s,%s,%s,%s,%s,%d\n",
+ quoted(entry["footprint"]),
+ quoted(entry["mfg"]),
+ quoted(entry["mfg_part_number"]),
+ quoted(entry["vendor"]),
+ quoted(entry["vendor_part_number"]),
+ entry["quantity"],
+ dim(refdes) * units);
+ item++;
}
void process_digikey(string[string] entry)
{
+ if (entry["loadstatus"] == "noload")
+ return;
printf("%s,%s,%s %s\n",
entry["quantity"],
- part_number(entry),
- entry["device"],
- entry["value"]);
+ quoted(part_number(entry)),
+ quoted(entry["device"]),
+ quoted(entry["value"]));
+}
+
+void process_mouser(string[string] entry)
+{
+ if (entry["loadstatus"] == "noload")
+ return;
+/* printf("%s|%s\n", part_number(entry), entry["quantity"]); */
+
+ static bool start = true;
+
+ if (start) {
+ printf("Mouser Part Number,Manufacturer Part Number,Quantity\n");
+ start = false;
+ }
+
+ printf("%s,%s,%s\n",
+ quoted(entry["vendor_part_number"]),
+ quoted(entry["mfg_part_number"]),
+ entry["quantity"]);
}
void process_other(string[string] entry) {
+ if (entry["loadstatus"] == "noload")
+ return;
printf("%s,%s,%s,%s %s\n",
entry["vendor"],
entry["quantity"],
- part_number(entry),
- entry["device"],
+ quoted(part_number(entry)),
+ quoted(entry["device"]),
entry["value"]);
}
string vendor = entry["vendor"];
if (!is_uninit(&vendors) && has_vendor(vendors, "seeed")) {
process_seeed(entry);
+ } else if (!is_uninit(&vendors) && has_vendor(vendors, "goldphoenix")) {
+ process_goldphoenix(entry);
} else if ((!is_uninit(&vendors) && has_vendor(vendors, vendor)) ||
(!is_uninit(¬_vendors) && !has_vendor(not_vendors, vendor))) {
switch (entry["vendor"]) {
case "digikey":
process_digikey(entry);
break;
+ case "mouser":
+ process_mouser(entry);
+ break;
default:
process_other(entry);
break;