Visual Studio - Breakpoints not being hit with Array.map - visual-studio

In the code below ( which is part of a function with = task{ )
Breakpoint 3 is being hit - and breakpoint 1 and 2 are not. the code is working ( i.e. the code is running in the Array.map and produces 29 rows but I can no longer debug that part of the code ). They were breakking and then they just stopped all of a sudden. Tried resetting settings, rebooting machine etc. Any ideas? All the builds are debug / Any CPU
let rows =
data.Rows
|> Seq.toArray
|> Array.map(fun row ->
let transactionDateString = row[0] + " " + row[1] //Breakpoint 1
let ttt = TimeZoneInfo.ConvertTime(DateTime.Parse(transactionDateString, CultureInfo.CreateSpecificCulture("en-AU")),TimeZoneInfo.FindSystemTimeZoneById("E. Australia Standard Time"),TimeZoneInfo.Local)
let transactionDateTime = DateTime.ParseExact(transactionDateString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture).AddHours(2)
let ttt2 = ttt.ToLocalTime()
let transactionNumber = row.Columns[2].ToString() // [ "TRXN Reference-Eway"]
let t2 = int transactionNumber // Breakpoint 2
let transactionType = row[3].ToString()
let transactionCurrency = currency
let csvData: EwayCSVData = {
transactionDateTime = transactionDateTime
transactionNumber = transactionNumber
transactionType = transactionType
currency = transactionCurrency
}
csvData)
do! EwayTransactions.saveTransactions(rows,sTransCollection, httpClient) // Breakpoint 3

Related

Google Script - Macro to get data from a TABLE A and paste required values to Table B in sequence using LOOP

I seek help in finalizing a MACRO script for following task.
Basic requirements is to get data from 'Ref' tab (around 200 symbols) in a sequence to 'Mcontrol'!E3 (this tab imports a table from the Website)
From this table, sorted highest 2 values of Symbol/s is extracted and exported to 'OI EOD' tab,
i.e. required value is shown in 'OI EOD'! G5:K5.
Then, copy paste range 'OI EOD'! G5:K5 , to the matched row (symbol match to 'Mcontrol'!E3) in the table below ('OI EOD'!C6:C210).
I seek help in putting forEach condition in the macro. SO that next cycle of copy paste function is completed, for each new value in Cell_1 reference.
Hope ppl take notice of the help request from a novice and give good solution and guidance.
Sheet link is Following
https://docs.google.com/spreadsheets/d/1az2kas91KFxHcWhtWDg-g20hNYR-_zEiWPvYs-x42YU/edit?usp=sharing
Macro -
var wb = SpreadsheetApp.getActive();
var sh1= wb.getSheetByName('Mcontrol');
var sh2= wb.getSheetByName('OI EOD');
var R1 = 3
var C1 = 3
var R2 = 3
var C2 = 2
var R3 = 3
var C3 = 5
var cell_1 = sh1.getRange(R1,C1).getValue();
var cell_2 = sh1.getRange(R2,C2).getValue();
var cell_3 = sh1.getRange(R3,C3).getValue();
for(i=1;i<cell_2;i++);
cell_1 = i + 1;
sh1.getRange(R1,C1).setValue(cell_1);{
var Range_1 = sh2.getRange(6, 3, 300);
var row_i = 5 ; // source row no. for data copy paste
const Row_1 = row_i;
const Col_2 = 7;
const Row_Offet1 = 1;
const Col_Offet1 = 5;
var data = Range_1.getValues();
let ABC = cell_3;
let row = 1 + data.findIndex(users => {return users[0] == ABC});
var row_target = row + row_i ;
const sourceRange = sh2.getRange(Row_1,Col_2,Row_Offet1,Col_Offet1);
var destRange = sh2.getRange(row_target,Col_2,Row_Offet1,Col_Offet1);
sourceRange.copyTo(destRange,SpreadsheetApp.CopyPasteType.PASTE_VALUES,false);
for(k=1;k<cell_1.i;k++);
Logger.log(row_target);
Logger.log(k) ;
}
//NEXT
// cell_1=sh1.getRange(R1, C1);
// sh1.getRange(R1,C1).setValue(i);
}
}```
Thanks
Robin
Not sure if understand the task as a whole, so here is a guess.
This way you can get values from some start to some end 'symbols' (or numbers) and put these values in correct rows on the 'OI EOD' sheet:
function main() {
var start = 1;
var end = 5;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var mcontrol_sheet = ss.getSheetByName('Mcontrol');
var oi_eod_sheet = ss.getSheetByName('OI EOD');
// get a list of all Symbols from column 'C' of the sheet 'OI EOD'
var symbols = oi_eod_sheet.getRange('c6:c').getValues().flat();
for (let i = start; i <= end; i++) {
// set the number i on the sheet 'Mcontrol' into the cell 'C3'
mcontrol_sheet.getRange('c3').setValue(i);
// wait to complete all the changes on the spreadsheet
SpreadsheetApp.flush();
// get the Symbol and Values from the range 'C5:K5' of the sheet 'OI EOD'
var [symbl, _, _, _, ...values] = oi_eod_sheet.getRange('c5:k5').getValues()[0];
// get the row index for this Symbol on the sheet 'Mcontrol'
var row = symbols.indexOf(symbl) + 6;
console.log({row}, {symbl}, {values});
// set the values on the sheet 'OI EOD' on the row with given index
oi_eod_sheet.getRange('g' + row + ':k' + row).setValues([values]);
}
}
It's up to you to decide how the start and end values could be defined. It can be values from two cells. Or it can be selected range. Or something else.

IfIndex calculation Huawei

I'm trying to interface to a Huawei device (MA5608T) via Python through SNMP.I learned that there is a correspondence between the index value and the port.
But I still don't understand how it translates
for example:
4194445056.0(index) = 0/17/7(port)
does anyone know what are the steps to do?
try this way:
4194304000 + (slot * (256 * 32)) + pon * 256) + '.' + onu_id
This Javascript code is taken from production. The binary operations will give you a clue on how to extract the data from the packet.
function convert_snmp_packet( packet ){
let regex = /[^\.]*/g;
let found = packet.match( regex );
if( found.length < 2 ) {
throw new Error( "wrong packet ? " + packet );
}
let left_part = parseInt( found[0] );
// found[1] is just the dot
let ont_index = parseInt( found[ 2 ] );
let slot_num;
let port_num;
slot_num = ( left_part & ( 15 << 13 ) ) >> 13;
port_num = ( left_part & ( 15 << 8 ) ) >> 8;
let json = {
slot_num: slot_num,
port_num: port_num,
ont_index: ont_index
};
return json;
}
test code:
class packet_Test extends Test {
test_packet( ){
// packet must be a String for this to work
let p = "4194445056.0";
let actual = convert_snmp_packet( p );
let expected = { slot_num: 1, port_num: 7, ont_index: 0 };
this.assertEquals( expected, actual );
this.done()
}
}
Sorry for the necromancy. Ran into this while looking for information about SNMP over a Huawei olt.

How to divide an entered time by a Float

So I'm making an app where you enter a time (1:32.40) and you then divide this time by a number (50). I made everything a Float so far, but that is clearly not right. How can I have the user enter the time like normal and then convert that to a Float that is easily divisible?
My Calculation function currently looks like this
func calculation() -> Bool{
raceDistance = txtRaceDistance.text
practiceDistance = txtPracticeDistance.text
goalTime = txtGoalTime.text
var fGoalTime = (goalTime as NSString).floatValue
var fRaceDistance = (raceDistance as NSString).floatValue
var fPracticeDistance = (practiceDistance as NSString).floatValue
dividedDistance = fRaceDistance / fPracticeDistance
answer = fGoalTime / dividedDistance
var answerFormat : NSString = NSString(format: "%0.2f", answer)
lblAnswer.text = String(answerFormat)
return true
}
fGoalTime is the only problem, because the user will be typing in something like (1:20.40)
I am assuming that you get an error for this line or just not the correct number.
var fGoalTime = (goalTime as NSString).floatValue
you will need to write a helper function timeStringToFloat(String) -> Float
In there you will want to use String.componentsSeparatedByString() maybe something like this:
func timeStringToFloat(timeString: String) -> Float {
let milliseconds = timeString.componentsSeparatedByString(".")[1]
let seconds = timeString.componentsSeparatedByString(.)[0].componentsSepatatedByString(":")[1]
let minutes = timeString.componentsSeparatedByString(":")[0]
//now we have them all as String
//maybe covert to float then add
let time = Float(minutes) * 60 + Float(seconds) + Float("0."+milliseconds)
return time
}

R: tm Textmining package: Doc-Level metadata generation is slow

I have a list of documents to process, and for each record I want to attach some metadata to the document "member" inside the "corpus" data structure that tm, the R package, generates (from reading in text files).
This for-loop works but it is very slow,
Performance seems to degrade as a function f ~ 1/n_docs.
for (i in seq(from= 1, to=length(corpus), by=1)){
if(opts$options$verbose == TRUE || i %% 50 == 0){
print(paste(i, " ", substr(corpus[[i]], 1, 140), sep = " "))
}
DublinCore(corpus[[i]], "title") = csv[[i,10]]
DublinCore(corpus[[i]], "Publisher" ) = csv[[i,16]] #institutions
}
This may do something to the corpus variable but I don't know what.
But when I put it inside a tm_map() (similar to lapply() function), it runs much faster, but the changes are not made persistent:
i = 0
corpus = tm_map(corpus, function(x){
i <<- i + 1
if(opts$options$verbose == TRUE){
print(paste(i, " ", substr(x, 1, 140), sep = " "))
}
meta(x, tag = "Heading") = csv[[i,10]]
meta(x, tag = "publisher" ) = csv[[i,16]]
})
Variable corpus has empty metadata fields after exiting the tm_map function. It should be filled. I have a few other things to do with the collection.
The R documentation for the meta() function says this:
Examples:
data("crude")
meta(crude[[1]])
DublinCore(crude[[1]])
meta(crude[[1]], tag = "Topics")
meta(crude[[1]], tag = "Comment") <- "A short comment."
meta(crude[[1]], tag = "Topics") <- NULL
DublinCore(crude[[1]], tag = "creator") <- "Ano Nymous"
DublinCore(crude[[1]], tag = "Format") <- "XML"
DublinCore(crude[[1]])
meta(crude[[1]])
meta(crude)
meta(crude, type = "corpus")
meta(crude, "labels") <- 21:40
meta(crude)
I tried many of these calls (with var "corpus" instead of "crude"), but they do not seem to work.
Someone else once seemed to have had the same problem with a similar data set (forum post from 2009, no response)
Here's a bit of benchmarking...
With the for loop :
expr.for <- function() {
for (i in seq(from= 1, to=length(corpus), by=1)){
DublinCore(corpus[[i]], "title") = LETTERS[round(runif(26))]
DublinCore(corpus[[i]], "Publisher" ) = LETTERS[round(runif(26))]
}
}
microbenchmark(expr.for())
# Unit: milliseconds
# expr min lq median uq max
# 1 expr.for() 21.50504 22.40111 23.56246 23.90446 70.12398
With tm_map :
corpus <- crude
expr.map <- function() {
tm_map(corpus, function(x) {
meta(x, "title") = LETTERS[round(runif(26))]
meta(x, "Publisher" ) = LETTERS[round(runif(26))]
x
})
}
microbenchmark(expr.map())
# Unit: milliseconds
# expr min lq median uq max
# 1 expr.map() 5.575842 5.700616 5.796284 5.886589 8.753482
So the tm_map version, as you noticed, seems to be about 4 times faster.
In your question you say that the changes in the tm_map version are not persistent, it is because you don't return x at the end of your anonymous function. In the end it should be :
meta(x, tag = "Heading") = csv[[i,10]]
meta(x, tag = "publisher" ) = csv[[i,16]]
x

Use createDocumentFragment() to add a table row

UPDATE -- this is a complete rewrite of the question on Monday 11/26
This code works:
name_this_table = "station_list"+i;
station_table = document.getElementById(name_this_table);
for (station_index in station_detail)
{
newRow = station_table.getElementsByTagName("tbody")[0].insertRow(-1);
newCell = newRow.insertCell(-1);
newCell.appendChild(document.createTextNode("one"));
newCell = newRow.insertCell(-1);
newCell.appendChild(document.createTextNode("two"));
newRow = null;
}
But I want to use createDocumentFragment(), like this:
name_this_table = "station_list"+i;
station_table = document.getElementById(name_this_table); // NOTE 1
//station_table = document.getElementById(name_this_table).tBodies[0];
var tableFrag;
tableFrag = document.createDocumentFragment();
tableFrag.appendChild(station_table); // NOTE 2
for (station_index in station_detail)
{
newRow = station_table.getElementsByTagName("tbody")[0].insertRow(-1); // NOTE 3
//newRow = tableFrag.getElementsByTagName("tbody")[0].insertRow(-1);
newCell = newRow.insertCell(-1);
newCell.appendChild(document.createTextNode("one"));
newCell = newRow.insertCell(-1);
newCell.appendChild(document.createTextNode("two"));
newRow = null;
}
document.getElementById(name_this_table).appendChild(tableFrag);
I have various failures to report -- not run-time errors, but the rendering stops.
NOTE 1 (above) -- I have tried the line below (uses tbodies) as an
alternative.
NOTE 2 -- If I uncomment this line, the rendering stops
at that point.
NOTE 3 -- Here I am trying to use the tableFrag ...
NEW ANSWER posted Tuesday 11/27
After a lot of experimenting, this works. I'd love any feedback (for one thing, I'm not sure I'm seeing a performance gain.
name_this_table = "station_list"+i;
station_table = document.getElementById(name_this_table);
var tableFrag;
tableFrag = document.createDocumentFragment();
tableFrag.appendChild(station_table); // NOTE 2
for (station_index in station_detail)
{
station_id = station_detail[station_index]["station_id"];
var newRow;
newRow = document.createDocumentFragment();
newRow = station_table.getElementsByTagName("tbody")[0].insertRow(-1);
newCell = newRow.insertCell(-1);
newCell.appendChild(document.createTextNode("one"));
...
station_table.appendChild(newRow);
newRow = null;
}

Resources