私はこれまでにそのようなコードを持っています:
private void button3_Click(object sender, EventArgs e)
{
label1.Visible = true;
label2.Visible = true;
var items = File.ReadAllLines("updated database folder/Resellers_Inventory.txt").
Skip(1).
Select(s =>
{
var strings = s.Split('|');
if (strings.Length != 2) throw new FormatException();
return new { Code = strings[0], Stock = Convert.ToInt32(strings[1]) };
}).
ToArray();
var compareTo = File.ReadAllLines("old database folder/ProductAll.txt").
Skip(1).
Select(s =>
{
var strings = s.Split(',');
if (strings.Length != 6) throw new FormatException();
return new { Path = strings[2].Trim('"'), Id = Convert.ToInt32(strings[3]), Name = strings[4].Trim('"'), Code = strings[5].Trim('"'), Stock = Convert.ToInt32(strings[6]) };
}).
ToArray();
string foldername = DateTime.Now.ToString("yyyy--MM--dd");
Directory.CreateDirectory("Update file of " + foldername);
string UpdeitoFailas = @"Update file of " + foldername + "/update.txt";
foreach (var item in items.Where(i => compareTo.Any(i2 => i.Code == i2.Code)))
{
if ((File.Exists(UpdeitoFailas)) && i.Stock != i2.Stock)
{
using (StreamWriter sw = new StreamWriter(UpdeitoFailas))
{
sw.Write("Product, " + i2.Path + ", " + i2.Id + ", " + i2.Name + ", " + i2.Code + ", " + i.Stock);
}
}
}
ファイル「Resellers_Inventory.txt」は次のようになります(数十万行で構成されます)。
Order Code|Stock
ACREPAIR|1031
AF813|18
AF823|12
AFCOB11|21
AFCS300|33
AFCS3000|1
AFEM4|5
AFOMNI|17
AFOX2|-3
AFOX3|-3
AFROD|28
AFSENSOR|50
AFUF21|24
AN00001|-1
AN00002|21
AN00003|4
AN00004|4
AN00005|9
...
ProductAll.txtファイルも、次のような数十万行で構成されています。
Action,CategoryPath,ID,Name,Code,Stock
"Product","Home > Opto-electronics > LED > Standard LED, Multicolour",2226,"KINGBRIGHT LED, 3MM, HE-RED/GRN L-93WEGW","SC07621",202
"Product","Home > Resistors > Fixed",2228,"VISHAY DRALORIC RESISTOR, 0402, 5%, 10K0 CRCW040210K0JNEAIF","RE06211",0
"Product","Home > Resistors > Fixed",2229,"VISHAY DRALORIC RESISTOR, 0402, 5%, 3R90 CRCW04023R90JNEAIF","RE06212",0
"Product","Home > Resistors > Fixed",2230,"VISHAY DRALORIC RESISTOR, 0402, 5%, 2R70 CRCW04022R70JNEAIF","RE06220",25
"Product","Home > Resistors > Fixed",2231,"VISHAY DRALORIC RESISTOR, 0402, 5%, 33R0 CRCW040233R0JNEAIF","RE06221",0
"Product","Home > Resistors > Fixed",2232,"VISHAY DRALORIC RESISTOR, 0402, 5%, 100R CRCW0402100RJNEAIF","RE06226",0
"Product","Home > IC's > Comparators",2234,"STMICROELECTRONICS IC, COMPARATOR DUAL, DIP8, 393 LM393N","SC10207",57
"Product","Home > IC's > Amplifiers > Operational",2237,"STMICROELECTRONICS OP AMP, QUAD JFET, DIP14 TL084CN","SC07929",82
"Product","Home > IC's > Amplifiers > Audio Power",2239,"NATIONAL SEMICONDUCTOR AMP, AUDIO 0.25W, DIP8, 386 LM386N-1","SC08430",83
"Product","Home > IC's > Microcontrollers",2241,"MICROCHIP 8BIT FLASH MCU, 12F675, DIP8 PIC12F675-I/P","ACREPAIR",16
...
基本的に私がやりたいのは、ProductAll.txtのように見えるが、そのように異なる3番目のファイルを作成することです。Resellers_Inventory.txtの在庫がProductAll.txtと異なる場合は、update.txtに次のような行を記述します。 ProductAll.txtの行と同じですが、Resellers_Inventory.txtの在庫値があります。株価が同じ場合は、この行をスキップして、新しい3番目のファイルに書き込みません。マッチングライン(在庫)は、両方のファイルで同じアイテムコードをマッチングすることによって実装されます。
現時点では、このようなエラーが発生しています。
Error 1 The name 'i' does not exist in the current context C:\Users\Tutis\Documents\Visual Studio 2008\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs 90 53 WindowsFormsApplication1
Error 2 The name 'i2' does not exist in the current context C:\Users\Tutis\Documents\Visual Studio 2008\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs 90 64 WindowsFormsApplication1
Error 3 The name 'i2' does not exist in the current context C:\Users\Tutis\Documents\Visual Studio 2008\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs 94 48 WindowsFormsApplication1
Error 4 The name 'i2' does not exist in the current context C:\Users\Tutis\Documents\Visual Studio 2008\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs 94 65 WindowsFormsApplication1
Error 5 The name 'i2' does not exist in the current context C:\Users\Tutis\Documents\Visual Studio 2008\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs 94 80 WindowsFormsApplication1
Error 6 The name 'i2' does not exist in the current context C:\Users\Tutis\Documents\Visual Studio 2008\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs 94 97 WindowsFormsApplication1
Error 7 The name 'i' does not exist in the current context C:\Users\Tutis\Documents\Visual Studio 2008\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs 94 114 WindowsFormsApplication1
しかし、これがなくても、新しいupdate.txtファイルシンボルに書き込む方法がわかりません。「その行は、他の株価だけでProductAll.txtと同じように見えます。