|
The indentation shows you what the problem is!
Not only are you missing a close curly bracket, but your while is part of your outer for loop, rather than the do ...
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Hi. There are 3 lists: List1, List2, List3;
List1: 1,2,3,... (can be empty)
List2: A,B,C,D,E,... (can be empty)
List3: a,b,c,... (can be empty)
I need to parse it into one List<obj> where OBJ{ data_list1, data_list2, data_list3}:
(1) 1,A,a
(2) 1,A,b
(3) 1,A,c
..
(..) 3,E,c
...
All variants of existing data form lists.
The list can be empty, and I need to use empty like a data. For example:
(1) empty, A,a
...
(2) empty,E,c
Could you advise the solution, please?
|
|
|
|
|
There is a Zip function which does some of what you want: Enumerable.Zip(IEnumerable<TFirst>, IEnumerable<TSecond>, Func<TFirst,TSecond,TResult>) Method (System.Linq) | Microsoft Docs[^]
List<int> list1 = new List<int>() { 1, 2, 3 };
List<string> list2 = new List<string>() { "A", "B", "C"};
List<string> list3 = new List<string>() { "a", "b", "c" };
var x = list1.Zip(list2, (a, b) => new { a, b }).Zip(list3, (a, c) => new { a.a, a.b, c }).ToList();
But ... the problem is that your lists are not necessarily the same length. I think that to get this to work in any practical way, you'd have to "pad" all three lists with NULL entries in order to use any standard methods. You would probably be better off writing your own class and providing a constructor that takes three lists and combines them the way you want.
What are you trying to do that you think this is a good idea? There may be better ways.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
This appears to me to require generating permutations/combinations. There are some excellent resources here for this in C#: I suggest you start here: [^].
And: [^] Here's a recent article that looks interesting: [^]
As OriginalGriff suggests, you need to get your data "normalized."
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
|
Since you've got a fixed number of lists, this should be fairly easy to do with a combination of SelectMany[^] and DefaultIfEmpty[^]:
var result = list1.DefaultIfEmpty().SelectMany(l1 => list2.DefaultIfEmpty().SelectMany(l2 => list3.DefaultIfEmpty().Select(l3 => new { l1, l2, l3 }))).ToList();
It's slightly cleaner using the query syntax:
var query = from l1 in list1.DefaultIfEmpty()
from l2 in list2.DefaultIfEmpty()
from l3 in list3.DefaultIfEmpty()
select new { l1, l2, l3 };
var result = query.ToList();
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
I have create a Win form app and create Polygons as follows:
private List<list<pointf>> Polygons = new List<list<pointf>>();
I store this polygons with Xml.Serialization, into a MySQL database as string and Deserialize it with my console app into a list of polygons again.
In my console app, which eventually is going to run from Raspberry Pi, I'm getting data from USB, which consist of floating X and floating Y coordinates.
Now I want to know how do I check if this point is within one of the polygons. I've tried it first with WinForms app and it works great.
public static bool IsPointInPolygon(IList<pointf> polygon, PointF testPoint)
{
try
{
bool result = false;
int j = polygon.Count() - 1;
for (int i = 0; i < polygon.Count(); i++)
{
if (polygon[i].Y < testPoint.Y && polygon[j].Y >= testPoint.Y || polygon[j].Y < testPoint.Y && polygon[i].Y >= testPoint.Y)
{
if (polygon[i].X + (testPoint.Y - polygon[i].Y) / (polygon[j].Y - polygon[i].Y) * (polygon[j].X - polygon[i].X) < testPoint.X)
{
result = !result;
}
}
j = i;
}
return result;
}
catch (Exception ex)
{
MessageBox.Show("error - " + ex.ToString());
return false;
}
I don't want to draw something, I know it's a console app, just getting a bool or int value back from the Test.
Any suggestions or help please?
|
|
|
|
|
What exactly is the problem? If the calculations work in a Windows Form app, then they will work in any other app.
|
|
|
|
|
I didn't add the drawing reference. Not my day. Thank you Richard. It works
modified 12-Nov-18 8:28am.
|
|
|
|
|
But the calculation is the same. Create a set of points which describe the polygon. Now do the comparisons with your test points.
|
|
|
|
|
Says who?
Of course you can! See the code I gave you in my reply - that code works just fine in a Console app!
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
If you create a GraphicsPath object for the points, you can use that to check:
System.Drawing.Drawing2D.GraphicsPath poly = new System.Drawing.Drawing2D.GraphicsPath();
poly.AddLine(10, 10, 90, 10);
poly.AddLine(90, 10, 90, 90);
poly.AddLine(90, 90, 10, 90);
poly.AddLine(10, 90, 10, 10);
Point inPoly = new Point(50, 50);
Point outPoly = new Point(0, 0);
Console.WriteLine(poly.IsVisible(inPoly) ? "IN" : "OUT");
Console.WriteLine(poly.IsVisible(outPoly) ? "IN" : "OUT");
The beauty of that is that the poly can be extremely complex and the framework will sort it out. For example, an hourglass:
System.Drawing.Drawing2D.GraphicsPath poly = new System.Drawing.Drawing2D.GraphicsPath();
poly.AddLine(10, 10, 90, 90);
poly.AddLine(90, 90, 10, 90);
poly.AddLine(10, 90, 90, 10);
poly.AddLine(90, 10, 10, 10);
Point inPoly = new Point(50, 40);
Point outPoly = new Point(40, 50);
Console.WriteLine(poly.IsVisible(inPoly) ? "IN" : "OUT");
Console.WriteLine(poly.IsVisible(outPoly) ? "IN" : "OUT");
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
How to get the WIFI and LAN usage in C#.
Also my requirement is to get the usage between specified date range.
|
|
|
|
|
This is not a good question - we cannot work out from that little what you are trying to do.
Remember that we can't see your screen, access your HDD, or read your mind - we only get exactly what you type to work with.
So stop trying to type as little as possible and explain what it is you are trying to do, what you have tired, where you are stuck, and what help you need!
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Thanks Griff,
Actually I am new to this implementation. Just want to know any API, till now I haven't got any API.
|
|
|
|
|
API for what? You haven't told us what you want!
We can't see your screen, we can't access your HDD, we can't read your mind.
We really do only get exactly what you type ... no other context.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
namespace ConsoleApplication2
{
using System;
using System.Diagnostics;
using System.Net.NetworkInformation;
using System.Threading;
class MainClass
{
static void Main()
{
NetworkInterface nic = NetworkInterface.GetAllNetworkInterfaces()[0];
IPv4InterfaceStatistics ip4 = nic.GetIPv4Statistics();
IPInterfaceStatistics ip = nic.GetIPStatistics();
long ip4data = ip4.BytesReceived + ip4.BytesSent;
long ipData = ip.BytesReceived + ip.BytesSent;
Console.WriteLine(ip4data + ipData);
NetworkInterface[] interfaces
= NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface ni in interfaces)
{
if (ni.Name == "Ethernet")
{
Console.WriteLine("LAN Usage:");
Console.WriteLine(" Bytes Sent: {0}",
ni.GetIPv4Statistics().BytesSent);
Console.WriteLine(" Bytes Received: {0}",
ni.GetIPv4Statistics().BytesReceived);
}
else if (ni.Name.ToLower() == "wi-fi")
{
Console.WriteLine("WIFI Usage:");
Console.WriteLine(" Bytes Sent: {0}",
ni.GetIPStatistics().BytesSent);
Console.WriteLine(" Bytes Received: {0}",
ni.GetIPStatistics().BytesReceived);
}
}
}
}
}
Now can you answer?
This code is working for current system session, how do I modify to read after all the reboot session usage?
Something like below:
Windows 10 : Go to Settings -> Network & Internet -> Data Usage
You can see the 1 month data usage.
|
|
|
|
|
Hi,
I am working on some migration project where data is exported from Oracle DB to Excel sheets. Extraction tool is different which is able to extract data to Excel around 1 Million also. In extraction tool Oledb Data reader is using which is extracting successfully. Even its extracting more than 1 M data as well in to multiple sheets in the same excel like Sheet1,Sheet2 etc. I need to read the entire excel data and store it in Data table. its working fine for below 6 lac data. But when i am trying to read the data from Excel using OleDb Data Adapter or Data Reader its failing when records exceed 8 Lac and giving error like "System Resources exceeded." My server is free and nothing is running ther and its 64 GB ram as well.
Find the code snap below.
tried with both Data Adapter and Data reader.
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT * FROM [" + sheet + "]";
OleDbDataReader reader = cmd.ExecuteReader();
if (sheet.Contains(DocSheet))
{
dtDocExcelData.Load(reader);
LogWriter.LogWrite("No of Files/docs to process for the File : " + inputFilePath + " Sheet Rows Count : " + dtDocExcelData.Rows.Count);
}
else if (sheet.Contains(FileSheet))
{
dtFileExcelData.Load(reader);
LogWriter.LogWrite("No of Files/docs to process for the File : " + inputFilePath + " Sheet Rows Count : " + dtFileExcelData.Rows.Count);
}
cmd.ResetCommandTimeout();
cmd.Dispose();
reader.Dispose();
}
visual studio is 2013 version and code is in C#. Excel version is also latest as 2016 (.XLSX).
please check the above code part and let me know where it is failing to load the bulk data from excel. Is there any other way to resolve this.?
When i googled it, one option is patch update, but client may not be ready for patch update. Provide me any other alternative solutions to over come this. Project is going to live by month end. UAT is phase is failing. please give me alternate solution at earliest.
Awaiting for your valuable suggestions. Thanks in advance.
Regards,
Venkat
|
|
|
|
|
It looks like you're trying to load your entire sheet into memory all at once. It doesn't matter if you use a DataReader or a DataAdapter. The problem is being caused by trying to load all that data and keep it all in a DataTable.
First, you have to ask yourself if that is really necessary. What are you doing with all that data where you think you need to keep it all in memory at the same time?
In your Project Properties, is your app platform target set to x64 or AnyCPU? Is the "prefer 32-bit" checkbox cleared if the target is AnyCPU?
|
|
|
|
|
Hi Dave,
Thanks for your quick reply. Actually its require for my application where i need to read all excel data and reframe it and maintain the same parent child relationship of Source data like Folder and associated documents and then prepare the XML file as per Data table data. Extraction utility is working while we use Oracle Reader which is able to fetch and load the Data table for more than 1 Million records.
As you mentioned i verified the settings, its ANY CPU and Prefer 32 bit is unchecked already. Can we set the limit for Data reader or adapter through code or COnfig file.?
|
|
|
|
|
Try this. If your project doesn't already have one, add an app.config file to it, then open it up.
Add the following "runtime" tag to the configuration element:
<configuration>
<runtime>
<gcAllowVeryLargeObjects enabled="true" />
</runtime>
</configuration>
Recompile and try it again.
|
|
|
|
|
Hi Dave,
Thank you for your reply. Added in config file as you mentioned but even though its failing while reading data more than 8 Lac in excel file.
Regards,
Venkat
|
|
|
|
|
OK, then don't fill a DataSet with the data. Use a DataReader and read each record from the file and process it. Then go to the next record.
|
|
|
|
|
Hi,
i have to read the complete data and manipulate it as per business logic before making XML file. with multiple iterations i came to know Data Reader/Adapter is failing when records are more than 8 lac and up to 6 lac data coming correctly and data truncating after 6 lac.
Seems its issue with Data Reader for bulk records. now i am going to use Interop instead of Data reader which is giving the correct results in Data table even its crossing 8 lac.
|
|
|
|
|
I decided to port one of my vb apps over to c#, so far so good. I decided to give MongoDB a try and load the MongoDB.Bson, MongoDB.Driver, MongoDB.Driver.Core and MongoDB.Respository.Crud packages from Nuget. I went the repository route like I did in my Angular6 wrapped in .Net Core 2.2 App, but didn't think it through all the way, or it's sort of a test run with it.
It just occurred to me that on my repository DBContext configuration, that it uses the appSettings.json file and Microsoft.Extensions.Options to read the MongoDB values. I did some research and found that extension is tied to .Net Core 2. Well I guess I just answered my own question of how to find a workaround for it. This should work, just need to figure out where to initialize it, like in main form loading.
I was going to try that C# Mongo Driver but it hasn't been updated since 2010.
Is anybody else using MongoDB 4.0 in VS2017 c# Win Form, And have any experience with it?
I would to take .Net Core 3 for a test run on this project. It just makes sense to me since I have written lots of .Net Core 2 code already that I can reuse.
In my Angular .Net Core 2 App
public class CRMRepository : ICRMRepository
{
private readonly MongoDBContext _context = null;
public CRMRepository(IOptions<Settings> settings)
{
_context = new MongoDBContext(settings);
}
Proposed Thought
public class MongoDB {
public string Connection { get;set; }
public string Database { get; set; }
}
public class CRMRepository : ICRMRepository
{
private readonly MongoDBContext _context = null;
public CRMRepository(MongoDB _mongoDB)
{
_context = new MongoDBContext(_mongoDB);
}
If it ain't broke don't fix it
Discover my world at jkirkerx.com
|
|
|
|
|