我有一个名为youtube-dl -f 93 --external-downloader ffmpeg --external-downloader-args\
"-hide_banner -reconnect 1 -reconnect_at_eof 1 \
-reconnect_streamed 1 -reconnect_delay_max 2 \
-fflags +genpts -user-agent proxy5 \
-c copy -sn -dn -hls_time 8 -hls_list_size 3000 \
-hls_wrap 80000 -hls_allow_cache 30 -hls_flags delete_segments i.m3u8" \
https://www.youtube.com/watch?v=8t3YhjKEYhw
的DataTable,它填充了excel的值。
在第6行(行)我有我的标题信息
我现在有代码
ffmpeg -re -i $(youtube-dl -f 93 -g 8t3YhjKEYhw ) \
-hide_banner -reconnect 1 -reconnect_at_eof 1 \
-reconnect_streamed 1 -reconnect_delay_max 2 \
-fflags +genpts -user-agent proxy5 -c copy -sn -dn \
-hls_time 8 -hls_list_size 3000 -hls_wrap 80000 \
-hls_allow_cache 30 -hls_flags delete_segments i.m3u8
我需要的是:
- 我希望第6行的所有数据都成为新DataTable中的标题
- 第7行之后的所有数据我需要使用新标题追加到这个新的数据表。
醇>
我的代码显示的内容:
我的代码现在展示了如何在克隆的DataTable上执行此操作,因此我的错误是headernames。
答案 0 :(得分:1)
如果您只需要其中一行,则无需遍历所有行。
DataTable dtSource = new DataTable();
DataTable dtTarget = new DataTable();
// Get row at index == 6 (7th line as this is a 0-based-index)
var headerRow = dtSource.Rows[6];
// Iterate through all values
foreach(var value in headerRow.ItemArray)
{
// For each value create a column
// and add it to your new dataTable
DataColumn dc = new DataColumn(value.ToString());
dc.Caption = value.ToString();
dtTarget.Columns.Add(dc);
}
答案 1 :(得分:1)
使用linq方法可能会很好: 伪方式:
//linq query to select row
var query = from myRow in
myDataTable.AsEnumerable() where myRow.Field<int>("RowNo") == 6
select myRow;
// Create a table from the query DataTable newTable =
query.CopyToDataTable<DataRow>();
答案 2 :(得分:0)
你的问题读起来很混乱,并且一直在谈论我期望列等的行,但我会做出以下假设:
代码:
for(int i = 5; i >= 0; i--){
if(i == 5)
{
for(int j = 0; j < dt.Columns.Count; j++)
dt.Columns[j].ColumnName = dt.Rows[i][j].ToString();
}
dt.Rows.RemoveAt(i);
}
您不需要克隆数据表。注意那些导致列名不佳的字符串(包含像'[')这样的字符会让你的生活更加悲惨。