|
|
Learn go debug - it is simple to learn and it will save you a LOT of time.
The first you can do is split the program out over multiple lines so it is easier to read and debug.
So instead of
string sub = line.Substring(line.IndexOf("<a name=") , line.Length - line.IndexOf("<a name=") - 6);
you can do something like:
string line = "<p class=\"rvps5\"><a name=\"4980_YM\"></a>";
int startPosition = line.IndexOf("<a name=");
if (startPosition >= 0)
{
int length = line.Length - startPosition - 6;
string substring = line.Substring(startPosition, length);
Console.WriteLine(substring);
}
Now set a breakpoint and step through each line. Inspect the variables as they are assigned to ensure they are the correct value. Once you do this, it will be evident that the startPosition is wrong, and the length does not match the length of the string. You will make mistakes like this ALL the time - we all do. Once you structure your code so it does less at once and spend 10 minutes learning debugging, you will fix errors like this in a few seconds.
In general parsing HTML is somewhat tricky to get right, and covering all different ways the same text can be represented is extremely difficult - but if your source text is consistent you should be able to get it working with this method.
|
|
|
|
|
Use a Regex:
(?<=<a name=").*?(?="></a>) Should do it.
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 the entire C# reference is open to you and you don't have to reinvent the wheel, you could parse it like it is xml and use Linq to Xml or an XmlReader. It goes much faster and has the added benefit of teaching you how to use these libraries to solve your problem.
I'm all for learning how to use regex and pattern recognition to parse strings if that is the exercise, but an important part to learn about programming is to make full use of the tools available to you rather than writing a solution that is already there, and most likely better optimized than what you can write.
|
|
|
|
|
I began the process of pulling stuff out of the registry and put them in a file called appSettings.json.
I installed the file in the target directory using WIX, and can't write to the file. The file has Admin level permissions, when you right click the file it shows the Shield.
When developing, it wasn't an issue. I didn't notice till I started testing the release version actually installed.
I tried modifying the file in WIX, but it doesn't do anything. I read the documentation and I'll swear that the code below is valid.
<Component Id="appSettings.json" Guid="6637d445-883d-46d6-a8b6-ad01e5814e27" NeverOverwrite="yes" Permanent="yes">
<File Id="appSettings.json" Name="appSettings.json" Source="$(var.AccountMate_TargetDir)appSettings.json" ReadOnly="no" >
<util:PermissionEx ChangePermission="yes" User="Users" Write="yes" WriteAttributes="yes" WriteExtendedAttributes="yes"/>
</File>
I'm wondering now if I should just move the file someplace else.
If it ain't broke don't fix it
Discover my world at jkirkerx.com
|
|
|
|
|
Well this is a Wix installer issue and my mistake. this appSettings file, well I wanted it to persist with settings when doing an program upgrade so I made it permanent. Bu then that made the file read only. The ex:persmssion did work, but created special accounts instead with the read only permissions.
I'm thinking back to Original Griff saying not to use the registry, but the registry sure seems much easier to manage than a file in the Program Application Target Dir. Perhaps times have changed or I just didn't think it all the way through.
If it ain't broke don't fix it
Discover my world at jkirkerx.com
|
|
|
|
|
The registry is - and was - easy to use, which meant it got abused, and badly. As a result, it's harder to use these days than it was (because badly written aps could do serious damage to a load of things) and that's not likely to get easier: quite the reverse.
Instead of that, there are environment folders (try typing "%appdata%" into the Windows explorer Address bar) which "separate" data and allow you to store what you want. (Where should I store my data?[^] shows how to use them in C#) and using XML, JSON, or any other format for data storage is pretty easy and flexible these days.
Pretty much as simple as using the registry, but with added flexibility and the ability to "share" info between apps: Instance Storage - A Simple Way to Share Configuration Data among Applications[^] for example.
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!
|
|
|
|
|
I hear what your saying there about the registry, and tried avoiding it. but I had a bad plan as far as location goes. My code is solid for reading and writing my json file, but I located the file in the wrong place. I learned this after reading up some more and examining other packages like Docker and how they did it. If my json file was read only then it would of worked fine.
I'll migrate it to AppData, and figure out how to get it there during install, or generate it.But I will store the location of my program in the registry so my other exe's can launch correctly.
If it ain't broke don't fix it
Discover my world at jkirkerx.com
|
|
|
|
|
The file should only be modified by an installer. If it is changed by the program, it is data. If it is data, it should be in another folder. You can manage security on that folder, and even choose to encrypt the data.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
I'm in the process of changing the location now. I just have to fix my installer registry errors first.
Then change my code. I'll put my nLogs in the same place as well.
Thanks Eddy!
If it ain't broke don't fix it
Discover my world at jkirkerx.com
|
|
|
|
|
Np; look at it like this; "Program Files" and the like are statical libraries, only to be changed during install-procedures. They're also likely to have a different backup-strategy from the data in the user-accounts.
The data you're proposing might even have to survive an install/uninstall-attempt?
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
That's what got me into trouble in the first place, was surviving an uninstall and upgrade.
Now I get it. Got my registry fixed now, so time to move that location.
If it ain't broke don't fix it
Discover my world at jkirkerx.com
|
|
|
|
|
How many companies back up the registry on each machine? How often does a VM get replaced?
Put it somewhere the sysop expects it and where backups actually occur
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Now you lost me. I was going to place it in the Users AppData Folder.
It's just a client app, and the file stores the MongoDB connection string and the SMTP parameters to send mail.
If it ain't broke don't fix it
Discover my world at jkirkerx.com
|
|
|
|
|
jkirkerx wrote: Now you lost me Peeking around curiously - are we lost again? Did you bring torches?
jkirkerx wrote: I was going to place it in the Users AppData Folder. If you're network-admin, paid to do backups, but be conservative on the amount of space used, which folders would you backup?
jkirkerx wrote: It's just a client app, and the file stores the MongoDB connection string and the SMTP parameters to send mail. That's not part of the installation-binaries, that's configuration
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
I cleaned up the wix installation. Just program files in the Application Folder.
Moved my appSettings to the AppData folder, and used the program code to initialize it.
Moving my nLogs to the AppData folder right now.
I wrote a program called SendError.exe. If the program crashes, it fires and picks up the crash log. It was using the appSettings.json file. But now that I have moved it, I need to figure out a way to tell it where the crash log is now.
A registry entry would be handy here, but I'll try and figure out a way around it.
So far so good, this should work out. And my touches are all lit now.
If it ain't broke don't fix it
Discover my world at jkirkerx.com
|
|
|
|
|
jkirkerx wrote: And my touches are all lit now. There be dragons down here boy!
jkirkerx wrote:
I wrote a program called SendError.exe. If the program crashes, it fires and picks up the crash log. It was using the appSettings.json file. But now that I have moved it, I need to figure out a way to tell it where the crash log is now. Have it make a mini-dump; you can open those in VS and even watch/inspect the variables when they change value
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
The SendError app I made needs the appSettings SMTP so it can send the crash file.
I haven't been able to figure out how to tell Wix installer to make the registry key that uses the Windows MiniCrash. So I'm using something that generates a crash log that can be viewed in Visual Studio, I think nBug does that. Exceptions.Report
<RegistryKey Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\EventLog\Application\$(var.Manufacturer)\$(var.Name)" ForceDeleteOnUninstall="yes">
<RegistryValue Name="EventMessageFile" Type="string" Value="C:\Windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll" />
</RegistryKey>
One more dragon to go here on the Crash Logs.
If it ain't broke don't fix it
Discover my world at jkirkerx.com
|
|
|
|
|
jkirkerx wrote: The SendError app I made needs the appSettings SMTP so it can send the crash file. It needs some information on which post office to use, that's all. That's configuration, not code.
jkirkerx wrote: One more dragon to go here on the Crash Logs. For settings, use a text-file. Only invoke dragons if all else failed.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Quote: Install-Package : Could not install package 'ReportUnit 1.2.1'. You are trying to install this package into a
project that targets '.NETFramework,Version=v4.5', but the package does not contain any assembly references or
content files that are compatible with that framework. For more information, contact the package author.
At line:1 char:1
+ Install-Package ReportUnit -Version 1.2.1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ( [Install-Package], Exception
+ FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackage
Command
|
|
|
|
|
Read the error message:
NalaBI wrote: For more information, contact the package author.
What did he say?
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 DalekDave,
I went through the Author articles, Two weeks ago he mentioned that the ReportUnit is being replaced by ExtentReports.
Thanks for your help. I appreciate it.
Regards
NalaBI
|
|
|
|
|
I'm not Dalek Dave - he likes Children's TV programs and not getting elected.
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!
|
|
|
|
|