Перевел код из JS в PureBasic а он нормально не работает
Код:function CSV(str) { this.Data = []; this.Data.push([]); let entry = ""; let row = 0; let lock = false; For (let i = 0; i < str.length+1; i++) { let char = str[i]; //console.log(`${i}:${char} ${str.charCodeAt(i)}`); If(char === undefined) { this.Data.pop(); Break; } If(lock && char === '"' && (str[i+1] === "," || str[i+1] === "\n") ) { lock = false; Continue } Else If(!lock && entry === "" && char === '"' && (str[i+1] !== "," || str[i+1] !== "\n") ) { lock = true; Continue } If(!lock && (char === "," || char === '"' && str[i+1] === "," || char === "\n") ) { this.Data[row].push(entry); console.log(`${row}:${entry}`); entry = ""; If(char === "\n") { this.Data.push([]); row++; } } Else { If(char === '"' && str[i+1] === '"') i++; entry += char; } } console.log("-----------------------"); console.log(this.Data.length); console.log(this.Data); } let Data = `"abc","def","ghi" "012","345","678" abc,def,ghi 012,345,678 "abc" 012 `; let csv3 = new CSV(Data); console.log(csv3);
0:abc
0:def
0:ghi
1:012
1:345
1:678
2:abc
2:def
2:ghi
3:012
3:345
3:678
4:abc
5:012
Код:Procedure iCSV(Array iStr.a(1)) entry.s = "" row.l = 0 lock.b = #False For i = 0 To ArraySize(iStr()) char.a = iStr(i) If char = 0 : Break : EndIf If (lock And char = 34 And (iStr(i+1) = 44 Or iStr(i+1) = 10)) lock = #False Continue ElseIf (Not lock And entry = "" And char = 34 And (iStr(i+1) <> 44 Or iStr(i+1) <> 10)) lock = #True Continue EndIf If (Not lock And (char = 44 Or char = 34 And iStr(i+1) = 44 Or char = 10)) ;this.Data[row].push(entry); Debug Str(row)+" | "+entry Debug "----------------" CallDebugger entry = "" If (char = 10) ; this.Data.push([]); CallDebugger row + 1 EndIf Else If (char = 34 And iStr(i+1) = 34) i+1 EndIf entry + Chr(char) EndIf Next EndProcedure wer.s = Chr(34)+"abc"+Chr(34)+","+Chr(34)+"def"+Chr(34)+","+Chr(34)+"ghi"+Chr(34)+Chr(10)+Chr(34)+"012"+Chr(34)+","+Chr(34)+"345"+Chr(34)+","+Chr(34)+"678"+Chr(34)+Chr(10)+"abc,def,ghi"+Chr(10)+"012,345,678"+Chr(10)+Chr(34)+"abc"+Chr(34)+Chr(10)+"012"+Chr(10) *idM = Ascii(wer) Len.l = MemorySize(*idM) Dim iStr.a(Len-1) CopyMemory(*idM, @iStr() , Len) iCSV(iStr()) FreeMemory(*idM) FreeArray(iStr())