다음 코드는 CSV 파일을 입력 한 다음 변환하여 CSV 파일을 출력합니다. CSV 읽기에 FileHelper를 사용하고 있습니다. 나는 그것에 몇 가지 문제가있다. 첫째, 필드 정보가있는 추가 행이 삽입됩니다 (아래 참조). 두 번째 문제는 큰 따옴표를 추가하여 쉼표가 포함 된 셀에 문자열을 포함 할 수 있다는 것입니다. 포맷팅에 문제가있는 것은 아니지만 Excel로 가져 오지 않고 큰 따옴표와 첫 번째 항목 만 보여줍니다. Excel로 가져올 때 이스케이프 텍스트 옵션에 큰 따옴표를 사용하여 시도했습니다. 세 번째 문제는 일부 필드가 비어있어 나중에 필드가 오프셋된다는 것입니다. 필드의문자열 및 쉼표로 된 문자열 문제
두 번째 줄 :
, base, 0, 0, 0, Product Name, Size, Brand, Gender, Type, SKU, Stock, Sí, "Photo1, Photo2, Photo3", Photo1, Photo1, Photo1
코드 :
using System;
using FileHelpers;
using System.IO;
[DelimitedRecord(";")]
public sealed class StoreItems
{
[FieldOptional()]
public String Attribut;
[FieldOptional()]
public String ProductName;
[FieldOptional()]
public String Size;
[FieldOptional()]
public String Brand;
[FieldOptional()]
public String Type;
[FieldOptional()]
public String ParentSKU;
[FieldOptional()]
public String SKU;
[FieldOptional()]
public String Stock;
[FieldOptional()]
public String RetailEURO;
[FieldOptional()]
public String SuggestedsellEURO;
[FieldOptional()]
public String Weight;
[FieldOptional()]
public String Description;
[FieldOptional()]
public String Photo1;
[FieldOptional()]
public String Photo2;
[FieldOptional()]
public String Photo3;
[FieldOptional()]
public String Gender;
[FieldOptional()]
public String EAN13;
}
public class RunProgram
{
public static void Main()
{
FileHelperEngine engine = new FileHelperEngine(typeof(StoreItems));
StoreItems[] res = engine.ReadFile("Presta.csv") as StoreItems[];
Directory.CreateDirectory("Output");
StreamWriter sw = new StreamWriter(@".\Output\" + DateTime.Now.ToString("hhmmss") + ".csv");
sw.AutoFlush = true;
Console.SetOut(sw);
Console.WriteLine("_type, _product_websites, tax_class_id, _visibility, is_in_stock, name, taglia, manufacturer, gender, _attribute_set, sku, qty, use_external_images, external_gallery, " +
"thumbnail_external_url, small_image_external_url, image_external_url");
foreach(StoreItems item in res)
{
string newtype = null;
int visibility = 0;
if (item.Attribut == "Parent")
{
newtype = "Configurable";
visibility = 4;
}
else if (item.Attribut == "Child")
{
newtype = "Simple";
visibility = 1;
}
int isinstock;
int stockint;
try
{
stockint = Convert.ToInt32(item.Stock);
}
catch
{
stockint = 0;
}
if (stockint > 0)
{
isinstock = 1;
}
else
{
isinstock = 0;
}
Console.WriteLine(newtype + ", base, 0, " + visibility + ", " + isinstock + ", " + item.ProductName + ", " + item.Size + ", " +
item.Brand + ", " + item.Gender + ", " + item.Type + ", " + item.SKU + ", " + item.Stock + ", Sí, " + @""""+item.Photo1+ ", "+item.Photo2+", "[email protected]"""" + ", " + item.Photo1 + ", " + item.Photo1 +
", " + item.Photo1);
}
}
}
편집 : 난 그냥 두 번째 줄은 입력 파일의 읽기에서 추가되는 것을 깨달았다. 첫 번째 줄을 무시하는 방법을 찾아야합니다. 필드도 더 이상 상쇄되지 않는 것처럼 보입니다. 이제 csv에서 쉼표를 사용하는 방법은 무엇입니까?
제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –